코드카타 - 정수 제곱근 판별

2024. 5. 30. 20:20코드카타(CodeKata)

문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.


입출력 예
n return
121 144
3 -1


입출력 예 설명
입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

풀이

import kotlin.math.*

class Solution {
    fun solution(n: Long): Long {
        var answer: Long = 0
        var x : Long = 0
        var x2 : Int = 0
        if (n >= 1 && n <= 50000000000000){
              x = sqrt(n.toDouble()).toLong()
              println(x)
              x2 = sqrt(n.toDouble()).toInt()
              println(x2)
            if ((sqrt(n.toDouble()) % 1.toDouble()) == 0.toDouble()) {
              answer = ((x+1)*(x+1)).toLong()
            } else {
                answer = -1
            }
        }   
        return answer
    }
}

 

유의사항

- int형과 long형의 차이
  (1) int형

    - 메모리 크기: 32비트 (4바이트)
    - 값의 범위: -2,147,483,648 ~ 2,147,483,647
    - int는 주로 작은 범위의 정수를 다룰 때 사용됩니다. 일반적인 경우 int가 충분히 큰 범위를 제공하지만,

      매우 큰 숫자를 다루거나 정수 오버플로우를 피해야 하는 상황에서는 long을 사용

  (2) long형
    - 메모리 크기: 64비트 (8바이트)
    - 값의 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807