๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Kotlin/Programmers Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฝ”ํ‹€๋ฆฐ] ์ •์ˆ˜ ์ œ๊ณฑ๊ทผ ํŒ๋ณ„ #12934

by eun.24k 2023. 10. 22.

#12934

๐ŸŽ„ Question ?

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

class Solution {
    fun solution(n: Long): Long {
        var answer: Long = 0
        return answer
    }
}

๐Ÿงฉ Thought Process

  1. n์˜ ์ œ๊ณฑ๊ทผ์„ ์ฐพ์•„์ฃผ๊ธฐ
  2. ๊ทธ ์ œ๊ณฑ๊ทผ์„ integer๋กœ ๋ฐ”๊พธ๊ธฐ
    ์•„๋ž˜ ๋งํฌ๋Š” ์†Œ์ˆซ์ ์„ ์—†์• ๊ฑฐ๋‚˜ ๋ฐ˜์˜ฌ๋ฆผ ๋ฐ˜๋‚ด๋ฆผ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์žˆ๋‹ค.
    ์š”์•ฝ: 
    parse: "2.5".toDouble()
    discard decimal: 2.5.toInt()
    round to neareset: 2.5.roundToInt()
    round to higher: ceil(2.5).toInt()
    round to lower: floor(2.5).toInt()
    https://stackoverflow.com/questions/68761149/how-can-i-convert-a-decimal-string-value-to-int-in-java
  3. n๋„ long์—์„œ integer๋กœ ๋ฐ”๊พธ๊ธฐ
  4. integer๋กœ ๋ฐ”๊พผ ์ œ๊ณฑ๊ทผ(x)์„ ๋‹ค์‹œ ์ œ๊ณฑํ•ด์ฃผ๊ธฐ
  5. x์˜ ์ œ๊ณฑ๊ณผ n์ด ๊ฐ™์œผ๋ฉด x+1 ์ถœ๋ ฅ
  6. ๊ฐ™์ง€ ์•Š์œผ๋ฉด -1 ์ถœ๋ ฅ (if ๋ฌธ ์‚ฌ์šฉ)
// 1์ฐจ ์‹œ๋„ (ํ…Œ์ŠคํŠธ 18๊ฐœ์ค‘ 15๊ฐœ ํ†ต๊ณผ :(
import kotlin.math.sqrt //๋ฃจํŠธ ์‚ฌ์šฉํ•  ๋•Œ ์ž„ํฌํŠธ ํ•ด์•ผํ•จ
import kotlin.math.pow  //์ œ๊ณฑ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์ž„ํฌํŠธ ํ•ด์•ผํ•จ
class Solution {
    fun solution(n: Long): Long {       //์ž…๋ ฅ๋˜๋Š” ๋ณ€์ˆ˜ n์€ Longํ˜•์ด๊ณ  ์ถœ๋ ฅ ๋˜๋Š” ๊ฐ’๋„ Longํ˜•์ด์–ด์•ผํ•จ
        var answer: Long = 0        
        var x = sqrt(n.toDouble())      // n์ด Doubleํ˜•์ด์—ฌ์•ผ๋งŒ ๋ฃจํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ
        if(x.pow(2) == n.toDouble()) {
            answer = (x+1).pow(2).toLong()
        } else {
            answer = -1
        }
        
        return answer
    }
}

 

๐ŸŽ€ Answer

์•„๋ฌด๋ฆฌ ๋ด๋„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค.

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

์ถฉ๊ฒฉ... ๋Œ€๋ฐ•.. ์ด๋ ‡๊ฒŒ ์‰ฝ๊ฒŒ ํ’€๋ฆฌ๋Š” ๊ฑฐ์˜€๋‹ค๊ณ ?? 

๋ฆฌํ„ด ๋’ค์— ์ดํ”„ ๋ฌธ ๋„ฃ๋Š”๊ฒƒ ๋„ ์‹ ์„ ํ•˜๋‹น.. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ณฑ์„ ํ• ๋•Œ ๋‚˜๋Š” ๋ฌด์กฐ๊ฑด .pow()๋ฅผ ์‚ฌ์šฉํ•  ์ƒ๊ฐ๋งŒ ํ–ˆ๋Š”๋ฐ ๊ณฑํ•  ์ˆ˜๋„ ์žˆ๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ํ’€์ด:

import kotlin.math.sqrt
import kotlin.math.pow
class Solution {
    fun solution(n: Long): Long {
        var answer: Long = 0
        val x = sqrt(n.toDouble())
        
        return if(x % 1.0 == 0.0) {
            (x + 1).pow(2.0).toLong()
        } else {
            -1L
        }
    }
}

์ง„์‹ฌ ์ฒœ์žฐ๊ฐ€?? ๋ฃจํŠธ๋ฅผ ์”Œ์šด ๊ฐ’์„ 1.0์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์†Œ์ˆซ์  ์ž๋ฆฌ์— ๋‚˜๋จธ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. else ๋’ค์— ์ถœ๋ ฅํ• ๋•Œ -1L๋งŒ ์“ฐ๋Š” ๊ฒƒ๋„ ์ข€ ๋ฉ‹์ง€๋‹ค.

๐ŸŽ Result

์˜ค์˜ˆ ๋•๋ถ„์— ํ†ต๊ณผ

 

๐Ÿ† Comment

๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ์‚ฐ์„ ์–ด๋–ป๊ฒŒ ํ•˜๊ณ  ๋ฐ˜์˜ฌ๋ฆผ ๋ฐ˜๋‚ด๋ฆผ ๋“ฑ์˜ ๋ฌธ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. sqrt, pow์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ํ•  ๋•Œ๋Š” ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์ˆ˜์˜ ์ž๋ฃŒํ˜•์ด Double์ž„์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ํ’€์ด๋ฅผ ๋งŽ์ด ๋ด์•ผ ๊ฒ ๋‹ค. ์ฒดํ™” ์‹œ์ผฐ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋„์›€์ด ๋งŽ์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.