잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

 

 

 

 

class Solution {
    fun solution(n: Long): Long {
        var temp = Math.sqrt(n.toDouble()).toLong();
        
        return if (temp * temp == n) (temp + 1) * (temp + 1) else -1;
    }
}

 

테스트 1 통과 (0.07ms, 62.5MB)
테스트 2 통과 (0.04ms, 60.7MB)
테스트 3 통과 (0.08ms, 63.7MB)
테스트 4 통과 (0.04ms, 64.1MB)
테스트 5 통과 (0.03ms, 64MB)
테스트 6 통과 (0.07ms, 63.3MB)
테스트 7 통과 (0.03ms, 63.6MB)
테스트 8 통과 (0.03ms, 63MB)
테스트 9 통과 (0.04ms, 63MB)
테스트 10 통과 (0.03ms, 64.2MB)
테스트 11 통과 (0.03ms, 62.5MB)
테스트 12 통과 (0.03ms, 62.1MB)
테스트 13 통과 (0.09ms, 62.7MB)
테스트 14 통과 (0.04ms, 62.4MB)
테스트 15 통과 (0.03ms, 64.7MB)
테스트 16 통과 (0.04ms, 62.9MB)
테스트 17 통과 (0.03ms, 64MB)
테스트 18 통과 (0.04ms, 64.5MB)

 

 

 

 

 

Math.sqrt()로 n의 제곱근을 구하는데, 이 때 안에 넣을 숫자는 double형으로 넣어야 error: type mismatch: inferred type is Long but Double was expected 오류가 뜨지 않는다.

그래서 n.toDouble()로 형 변환 후 파라미터로 넣었음.

그리고 리턴값은 long이길 원해서 toLong()으로 형 변환을 했음.. 

 

 

 

 

그리고나서 if문을 돌릴 때 그냥 리턴 값인 temp의 제곱이 n과 일치한지를 파악하고, 맞으면 temp + 1의 제곱을 리턴, 아니면 -1을 리턴하도록 작성하였다.

 

 

 

 

이 때 제곱을 구하는 것은 그냥 (temp + 1) * (temp + 1)로 작성하였지만,

Math.pow((temp + 1).toDouble(), 2.0)으로도 작성할 수 있다.

 

 

 

 

 

728x90

+ Recent posts