Skip to content

Commit 6f11cdc

Browse files
committed
add: Product of Array Except Self solution
1 parent eebeb27 commit 6f11cdc

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// [238] Product of Array Except Self
2+
3+
/**
4+
* [Idea]
5+
* nums[i] 를 기준으로 왼쪽 부분 (prefix)은 계속 구간을 늘려주고, 오른쪽 부분(suffix)은 계속 구간을 줄여주는 방식
6+
* i = 0:
7+
* [ ] * [2, 3, 4, 5, 6] => prefix: 0, suffix: 2 * 3 * 4 * 5 * 6
8+
* i = 1:
9+
* [1] * [3, 4, 5, 6] => prefix: 1, suffix: 3 * 4 * 5 * 6
10+
* i = 2:
11+
* [1, 2] * [4, 5, 6] => prefix: 1 * 2, suffix: 4 * 5 * 6
12+
* i = 3:
13+
* [1, 2, 3] * [5, 6] => prefix: 1 * 2 * 3, suffix: 5 * 6
14+
*
15+
* [Time Complexity]
16+
* O(n) (n: nums의 길이)
17+
* 1. prefix를 구하는 과정에서 O(n)
18+
* 2. suffix를 구하는 과정에서 O(n)
19+
*
20+
* [Space Complexity]
21+
* O(1)
22+
* answer 배열을 제외한 추가적인 공간을 사용하지 않음
23+
*
24+
*/
25+
function productExceptSelf(nums: number[]): number[] {
26+
const n = nums.length;
27+
const answer = new Array<number>(nums.length);
28+
29+
// answer 배열에 prefix값 설정해주기
30+
let prefix = 1;
31+
for (let idx = 0; idx < n; idx++) {
32+
answer[idx] = prefix;
33+
prefix *= nums[idx];
34+
}
35+
36+
// 각 prefix에 suffix 값 누적해서 곱해주기
37+
let suffix = 1;
38+
for (let idx = n - 1; idx >= 0; idx--) {
39+
answer[idx] *= suffix;
40+
suffix *= nums[idx];
41+
}
42+
43+
return answer;
44+
}

0 commit comments

Comments
 (0)