Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 포인터
- 해시테이블
- RxJS
- 연결 리스트
- 큐
- C
- GraphQL
- 자바스크립트
- 프론트엔드
- 이진탐색
- 웹팩
- RT scheduling
- APOLLO
- 배열
- cors
- 스택
- 타입스크립트
- 컨테이너
- 프로세스
- 릿코드
- 프로그래머스
- 브라우저
- 코딩테스트
- 자료구조
- Machine Learning
- vue3
- 연결리스트
- alexnet
- 알고리즘
- pytorch
Archives
- Today
- Total
프린세스 다이어리
[LeetCode] Pow(x, n) 문제 - 자바스크립트 풀이 본문
728x90
1. 접근 방법
(1) 이진탐색 분야로 구분돼 있으나 도무지 이진탐색이 떠오르지 않아 재귀로 풀었다. 연산을 쪼개어 작은 연산의 결과를 다음 연산에도 계속 쓰기 때문에 재귀가 잘 어울리는 문제다.
(2) 분할정복의 원리를 이용하여 시간복잡도 O(logN)로 풀어낼 수 있다.
거듭제곱을 이용하여(x^4 * x^4 = x^8 이 되는 원리) 풀면 속도가 한 번 당 절반으로 줄어든다. 그냥 단순 반복문 O(N)으로 풀어도 되기는 하는데 주어지는 값의 범위가 너무 커지면 시간초과가 날 수 있다. n이 짝수면 절반으로 줄여서 제곱하고, n이 홀수면 1 뺀 값을 절반으로 줄여서 제곱한 후, 한 번 x를 추가로 곱해서 리턴한다.
if (n % 2 === 0) {
const answer = getPow(x, n / 2);
return answer * answer;
} else {
const answer = getPow(x, (n - 1) / 2);
return answer * answer * x;
}
(3) 예외처리 추가해줌
if (x === 1 || n === 0) return 1;
if (n === 1) return x;
2. 전체 해답
/**
* @param {number} x
* @param {number} n
* @return {number}
*/
var myPow = function(x, n) {
if (n < 0) {
x = 1/x;
n = -n;
}
return getPow(x, n);
};
const getPow = (x, n) => {
if (x === 1 || n === 0) return 1;
if (n === 1) return x;
if (n % 2 === 0) {
const answer = getPow(x, n / 2);
return answer * answer;
} else {
const answer = getPow(x, (n - 1) / 2);
return answer * answer * x;
}
}
한번쯤 알아두면 좋은 연산!
728x90
'자료구조, 알고리즘' 카테고리의 다른 글
[LeetCode] Reverse String - 자바스크립트 풀이 (0) | 2021.11.29 |
---|---|
[LeetCode] Valid Perfect Square - 자바스크립트 풀이 (0) | 2021.11.29 |
[LeetCode] Find K Closest Elements - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Search for a Range - 자바스크립트 풀이 (0) | 2021.11.28 |
[LeetCode] Find Minimum in Rotated Sorted Array - 자바스크립트 풀이 (0) | 2021.11.28 |
Comments