[Programmers] #120909 - 제곱수 판별하기 [Java][C++][Python]
[Programmers] #120909 - 제곱수 판별하기 [Java][C++][Python]
1. 아이디어
정수 n에 대해 n이 제곱수인지 여부를 판단하는 문제로 1부터 제곱수를 구해 n과 동일한지 비교하는 방식으로 해결해도 되고, 제곱근을 구하는 내장 함수를 활용해서 해결해도 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(1)$ | $O(1)$ |
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
class Solution {
public int solution(int n) {
long r = Math.round(Math.sqrt(n));
return r * r == n ? 1 : 2;
}
}
Math.sqrt로 n의 제곱근을 실수로 구한 뒤 Math.round로 반올림을 했다. 부동소수점 오차가 아주 미미하므로 반올림을 하면 올바른 후보를 구할 수 있다. 이후 r * r == n으로 n이 r의 제곱수인지 판정했다.
1
2
3
4
5
6
7
#include <bits/stdc++.h>
using namespace std;
int solution(int n) {
int r = round(sqrt(n));
return r * r == n ? 1 : 2;
}
std::sqrt로 n의 제곱근을 실수로 구한 뒤 std::round로 반올림을 했다. 부동소수점 오차가 아주 미미하므로 반올림을 하면 올바른 후보를 구할 수 있다. 이후 r * r == n으로 n이 r의 제곱수인지 판정했다.
1
2
3
4
5
6
import math
def solution(n):
r = math.isqrt(n)
return 1 if r * r == n else 2
math.isqrt를 활용하면 n의 정수 제곱근(= 제곱해서 n을 넘지 않는 최대 정수)을 구할 수 있다. 이후 r * r == n으로 n이 r의 제곱수인지 판정했다.
This post is licensed under CC BY 4.0 by the author.