有希
LeetCode/Pow(x,n) 본문
어려운 문제는 아니다. 기본적인 수학 문제. 다만 문제가 조금 이상한게, 예외처리에서 n이 INT_MAX이거나 INT_MIN일 때만 처리하면 된다.
double의 범위에서 1다음으로 큰 1.00001 을 2^31-1 제곱하면 다음과 같은 수가 나온다.
나는 이렇게 크게 나올지 몰랐는데 1을 2^31-1 했을때 timeout이 나오는거 보고 설마해서 계산해봤더니 엄청 큰 수가 나왔다.
아무튼, INT_MAX와 INT_MAX일 때에는 항상 x가 1 or -1 or 0이 주어진다고 보면 된다. 따라서 코드는 아래와 같이 짠다. 속도는 0ms 나오는거보면 더 고민해 볼 필요는 없을듯. discuss에 가봐도 다들 1중 루프 써서 풀었다.
class Solution {
public:
double myPow(double x, int n) {
double res=1;
//n이 0이면 1 return
if(n==0) return 1;
//abs(n)이 매우 클 때
if(n==INT_MAX)
return x;
else if(n==INT_MIN)
return (x==1 or x==-1) ? 1:0;
//일단 곱한다
for(int i=0; i<abs(n); ++i)
{
res *= x;
}
//n이 양수이면 그대로 return
if(n>0)
{
return res;
}
//n이 음수이면 추가로 1/ 한다
else
{
return 1/res;
}
}
};
'프로그래밍 > 알고리즘+코딩테스트' 카테고리의 다른 글
LeetCode/Find the Town Judge (0) | 2022.04.30 |
---|---|
LeetCode/Spiral Matrix (0) | 2022.04.30 |
LeetCode/Group Anagrams (0) | 2022.04.20 |
LeetCode/Rotate Image (0) | 2022.04.20 |
LeetCode/Permutations (0) | 2022.04.20 |