관리 메뉴

有希

LeetCode/Pow(x,n) 본문

프로그래밍/알고리즘+코딩테스트

LeetCode/Pow(x,n)

有希. 2022. 4. 29. 22:47

어려운 문제는 아니다. 기본적인 수학 문제. 다만 문제가 조금 이상한게, 예외처리에서 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