티스토리 뷰
Question
Implement pow(x, n), which calculates x raised to the power n (i.e., xn).
x의 n승을 리턴하는 pow 함수를 구현하라.
제약사항
- -100.0 < x < 100.0
- -2^31 <= n <= 2^31-1
- -10^4 <= xn <= 10^4
Solution
문제를 해결할 때 고려한 사항
- 주어진 x 의 범위가 실수 자료형이다.
- n의 범위가 int형 범위의 최소부터 최대까지 나올 수 있다.
- 다만 xⁿ의 결과가 -10^4 부터 10^4으로 범위 안이다.
Solution1
단순하게 생각해보면 pow 함수는 x를 n번 곱하는 동작이기 때문에 이를 그대로 구현할 수 있다.
class Solution {
public:
double myPow(double x, int n) {
double ans = 1;
if(n>=0){
while(n--) ans *= x;
}else{
while(n++) ans *= 1/x;
}
return ans;
}
};
이때의 시간복잡도는 O(n)이다.
하지만 잘 생각해보면 연산의 횟수를 줄일 수 있다. 예를 들어, 2x2x2x2 = 2⁴ = 2²x 2² 계산량이 절 반으로 줄어들어 O(n) 보다 적은 시간으로 계산을 수행할 수 있다.
- Time complexity : O(n)
- Space Complexity : O(1)
Solution2
class Solution {
public:
double myPow(double x, int n) {
double ans = 1.0;
long copy_n = n;
if (copy_n < 0) {
copy_n = -1 * copy_n;
}
while (copy_n > 0) {
if (copy_n & 1) {
ans = ans * x;
copy_n = copy_n - 1;
}
else {
x = x * x;
copy_n >>= 1;
}
}
if (n < 0) {
ans = (double)(1.0) / (double)(ans);
}
return ans;
}
};
// 해당 문제의 Discuss 참고
출처 : https://leetcode.com/explore/interview/card/top-interview-questions-medium/113/math/818/
'IT > Problem Solving' 카테고리의 다른 글
[C++] LeetCode : Majority Element (0) | 2022.08.16 |
---|---|
[C++] LeetCode : Sqrt(x) (0) | 2022.08.15 |
[C++] LeetCode : Excel Sheet Column Number (0) | 2022.08.15 |
[C++] LeetCode : Happy Number (0) | 2022.08.14 |
[C++] LeetCode : Factorial Trailing Zeros (0) | 2022.08.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 속초
- 반드시 알아야 할 자료구조
- 러스트 입문
- ProblemSolving
- C++
- LeetCode
- 트리
- Interview
- rust
- 러스트
- 기술면접
- 러스트 배우기
- 인터뷰
- coding interview
- 맛집
- 속초 맛집
- Problem Solving
- algorithm
- PS
- 내돈내산
- 리트코드
- 솔직후기
- Medium
- 러스트 기초
- DP
- interview question
- 자료구조
- 코딩인터뷰
- 알고리즘
- Tree
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함