Skip to content

Commit 9df34f3

Browse files
committed
product of array except self solution
1 parent 96a4354 commit 9df34f3

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* 복잡도 분석:
3+
* - 시간: O(n) - 배열을 두 번 순회 (왼쪽→오른쪽, 오른쪽→왼쪽)
4+
* - 공간: O(1) - answer 배열은 출력이므로 제외, rightProduct 변수만 사용
5+
*/
6+
7+
/**
8+
* @param {number[]} nums
9+
* @return {number[]}
10+
*/
11+
const productExceptSelf = (nums) => {
12+
const n = nums.length;
13+
const answer = new Array(n);
14+
15+
/**
16+
* 아이디어:
17+
* answer[i] = (i 왼쪽 모든 요소의 곱) × (i 오른쪽 모든 요소의 곱)
18+
*
19+
* 예시: [1, 2, 3, 4]
20+
* - 왼쪽 곱: [1, 1, 2, 6]
21+
* - 오른쪽 곱: [24, 12, 4, 1]
22+
* - 결과: [24, 12, 8, 6]
23+
*/
24+
25+
// 1단계: 왼쪽에서 오른쪽으로 순회하며 왼쪽 곱 저장
26+
answer[0] = 1; // 첫 번째는 왼쪽에 아무것도 없으므로 1
27+
for (let i = 1; i < n; i++) {
28+
answer[i] = answer[i - 1] * nums[i - 1]; // 이전까지의 곱 × 이전 요소
29+
}
30+
31+
// 2단계: 오른쪽에서 왼쪽으로 순회하며 오른쪽 곱을 곱해줌
32+
let rightProduct = 1; // 오른쪽 곱을 누적할 변수
33+
for (let i = n - 1; i >= 0; i--) {
34+
answer[i] *= rightProduct; // 왼쪽 곱 × 오른쪽 곱
35+
rightProduct *= nums[i]; // 다음 순회를 위해 현재 요소 곱함
36+
}
37+
38+
return answer;
39+
};

0 commit comments

Comments
 (0)