[Kotlin] ์ •์ˆ˜ ์ œ๊ณฑ๊ทผ ํŒ๋ณ„ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜)
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12934

 

 


 

์ ‘๊ทผ

 

  • if๋ฌธ์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•˜๋Š” ์กฐ๊ฑด๋งŒ ์ž˜ ๊ตฌํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค.
  • ๋Œ€์ถฉ ์•„๋ž˜์™€ ๊ฐ™์€ ๋Š๋‚Œ?

 

// ๊ตฌ์ƒ

class Solution {
    fun solution(n: Long): Long {
                
        if(์ œ๊ณฑ์ˆ˜์ธ์ง€ ๊ตฌํ•˜๋Š” ํŒ๋ณ„ ์‹){
            return (x+1)(x+1)
        } else {
            return -1
        }
        
        
        return 0
    }
}

 

  • ์ œ๊ณฑ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.
  • ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ, ํ•œ ๋ฒˆ ๋‚ด๊ฐ€ ์•„๋Š” ํ•จ์ˆ˜์™€ ๋ฌธ๋ฒ•์„ ํ† ๋Œ€๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.
  • ์กฐ์„ ์‹œ๋Œ€์—์„œ ์ œ๊ณฑ์ˆ˜๋ฅผ ๊ตฌํ•˜๋˜ ๋ฐฉ์‹ ( 2๋กœ ๋‚˜๋ˆ„๊ณ  1๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋บ€ ๋’ค ์Œ์ˆ˜๊ฐ€ ๋์„ ๋•Œ ์›๋ž˜ ๋นผ๋ ค๋˜ ์ˆ˜์™€ ๋น„๊ต)
    โ˜ž ๋„ˆ๋ฌด ํ”„๋กœ๊ทธ๋žจ์— ๋น„ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์‹์ผ ๊ฒƒ ๊ฐ™์•„์„œ ํŒจ์Šค
  • i๋ฅผ 1๋ถ€ํ„ฐ (n/2)๊นŒ์ง€ ๋Š˜๋ฆฌ๋ฉด์„œ ๊ทธ ์ˆ˜์˜ ์ œ๊ณฑ๊ณผ ๋“ค์–ด์˜จ n์„ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹
    โ˜ž ์ด๊ฒƒ๋„ ํ”„๋กœ๊ทธ๋žจ์— ์—„์ฒญ ๋น„ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์„ ๋งŽ์ด ํ•  ๊ฒƒ ๊ฐ™์Œ
  • i๋ฅผ 1๋ถ€ํ„ฐ (n/2)๊นŒ์ง€ ๋Š˜๋ฆฌ๋ฉด์„œ n์„ ๊ทธ ์ˆ˜๋กœ ๋‚˜๋ˆด์„ ๋•Œ i์ธ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹
    โ˜ž ํ•œ ๋ฒˆ ์ด ๋ฐฉ์‹์„ ์ ์šฉํ•ด๋ณด๊ธฐ๋กœ ์‹œ๋„ํ–ˆ๋‹ค.

 

// ํ…Œ์ŠคํŠธ 13, 18 ์‹คํŒจ
class Solution {
    fun solution(n: Long): Long {
        for(i in 1 .. n/2){         
            if(n / i == i){
                return (i+1) * (i+1)
                break
            }
            if (i == n/2) return -1
        }
        return 0
    }
}


// ์ „์ฒด ์„ฑ๊ณต, BUT ๋Š๋ฆผ
class Solution {
   fun solution(n: Long): Long {
        for (i in 1..n) {
            if (i * i == n) {
                return (i + 1) * (i + 1)
            }
        }
        return -1
    }
}

 

  • ์ฒ˜์Œ์—” Longํ˜•์‹์˜ i๊ฐ€ (i+1)(i+1)์„ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ, (i+1)*(i+1) ๋กœ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค. 
  • ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆด๋ฟ๋”๋Ÿฌ, ์•ˆํƒ€๊น๊ฒŒ๋„ ํ…Œ์ŠคํŠธ 13, ํ…Œ์ŠคํŠธ 18์—์„œ ์‹คํŒจํ–ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๋ฐฉ์‹์„ ๋ฒ„๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์„ ์ฐจ์šฉํ•˜๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, ๋„ˆ๋ฌด ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋Š๋ฆฌ๊ณ  ๋น„ํšจ์œจ์ ์ด์—ˆ๋‹ค.

 

 

  • ๊ทผ๋ณธ์ ์œผ๋กœ ์ด๋ ‡๊ฒŒ ๋ง๋„ ์•ˆ๋˜๊ฒŒ ์ˆ˜์ž‘์—…์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒŒ ๋‹ต์ผ๋ฆฌ๋Š” ์—†๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ ,
    ํ˜•์„ Float๋‚˜ Double๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ œ๊ณฑ ํ•จ์ˆ˜์ธ pow()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ... ์‹ถ๋‹ค๊ฐ€
    ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.
  • sqrt(sqaure root)์™€ pow(power)๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ํ’€์ด์—ˆ๋‹ค.

 


 

์„ฑ๊ณต ์ฝ”๋“œ

 

import kotlin.math.*
class Solution {
    fun solution(n: Long): Long {
        val a = sqrt(n.toDouble()).toLong()
        return if (a * a == n) (a + 1)*(a + 1) else -1
    }
}

 


 

์„ค๋ช…

 

  1. import kotlin.math.* ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
  2. ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•˜๋Š” sqrt() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.
  3. ์ œ๊ณฑ์„ ๊ตฌํ•˜๋Š” pow() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  4. ์ฐธ๊ณ ๋กœ sqrt(), pow() ์ธ์ˆ˜๋“ค๊ณผ ๋ฐ˜ํ™˜ํ˜•์€ Double ํ˜•์ด๋ฏ€๋กœ ์ด์ ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
  5. toDouble()๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•˜๊ณ  ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•ด์ค€ ๋’ค, ๋‹ค์‹œ ์ •์ˆ˜ํ˜•์œผ๋กœ toLong()์„ ํ•˜์˜€๋‹ค.
  6. ์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์˜€๋‹ค๋ฉด a * a == n ์ด ๋˜์–ด ๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๊ณ , ์•„๋‹ˆ๋ฉด -1์ด ์ถœ๋ ฅ๋œ๋‹ค.

 


 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

 

import kotlin.math.*
class Solution {
    fun solution(n: Long): Long {
        val sqrt = sqrt(n.toDouble())
        return if(sqrt % 1.0 == 0.0) {
            (sqrt + 1).pow(2.0).toLong()
        } else {
            -1
        }
    }
}
  • ํ’€์ด ์ฝ”๋“œ์™€ ๋‹ฌ๋ฆฌ sqrt()์™€ pow()๋ฅผ ๋ชจ๋‘ ์“ด ์ฝ”๋“œ์ด๋‹ค.
  • sqrt๋ฅผ 1.0์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ์ •์ˆ˜ ์ œ๊ณฑ๊ทผ์„ ๊ฐ€์ง„ ์ˆ˜์ด๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T