Skip to content

Commit ba002c4

Browse files
committed
3. Product of Array Except Self 2
1 parent f62a2c0 commit ba002c4

File tree

1 file changed

+38
-36
lines changed

1 file changed

+38
-36
lines changed

product-of-array-except-self/whewchews.ts

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,36 @@ function productExceptSelf(nums: number[]): number[] {
88
* 2. 자신이 0이 아니면
99
* 2-1. zeroCount가 있는지 보고 있으면 0을 return
1010
* 2-2. zero가 없으면 sum/self를 return
11+
*
12+
* 그러나... 문제에 나누기 연산자를 쓰면 안된다고 했으므로 Solution 2로 가자.
1113
*/
12-
let zeroCount = 0;
13-
const sum = nums.reduce((p, c) => {
14-
if (c === 0) {
15-
zeroCount += 1;
16-
return p;
17-
}
18-
p = p * c;
19-
return p;
20-
}, 1);
14+
// let zeroCount = 0;
15+
// const sum = nums.reduce((p, c) => {
16+
// if (c === 0) {
17+
// zeroCount += 1;
18+
// return p;
19+
// }
20+
// p = p * c;
21+
// return p;
22+
// }, 1);
2123

22-
const hasZero = zeroCount > 0;
24+
// const hasZero = zeroCount > 0;
2325

24-
if (zeroCount === nums.length) return Array(nums.length).fill(0);
26+
// if (zeroCount === nums.length) return Array(nums.length).fill(0);
2527

26-
return nums.map((n) => {
27-
if (n === 0) {
28-
// 자신 이외에 0이 있을때
29-
if (zeroCount - 1 > 0) {
30-
return 0;
31-
}
28+
// return nums.map((n) => {
29+
// if (n === 0) {
30+
// // 자신 이외에 0이 있을때
31+
// if (zeroCount - 1 > 0) {
32+
// return 0;
33+
// }
3234

33-
return sum;
34-
}
35+
// return sum;
36+
// }
3537

36-
if (hasZero) return 0;
37-
return sum / n;
38-
});
38+
// if (hasZero) return 0;
39+
// return sum / n;
40+
// });
3941
// TC: O(N)
4042
// SC: O(N)
4143

@@ -44,25 +46,25 @@ function productExceptSelf(nums: number[]): number[] {
4446
* 2. suffix: 자신을 제외한 자기 뒤까지의 곱을 저장한다.
4547
* 3. answer[i] = prefix[i] * suffix[i]
4648
*/
47-
// const n = nums.length;
49+
const n = nums.length;
4850

49-
// const prefix = new Array(n).fill(1);
50-
// const suffix = new Array(n).fill(1);
51+
const prefix = new Array(n).fill(1);
52+
const suffix = new Array(n).fill(1);
5153

52-
// for (let i = 1; i < n; i++) {
53-
// prefix[i] = prefix[i - 1] * nums[i - 1];
54-
// }
54+
for (let i = 1; i < n; i++) {
55+
prefix[i] = prefix[i - 1] * nums[i - 1];
56+
}
5557

56-
// for (let i = n - 2; i >= 0; i--) {
57-
// suffix[i] = suffix[i + 1] * nums[i + 1];
58-
// }
58+
for (let i = n - 2; i >= 0; i--) {
59+
suffix[i] = suffix[i + 1] * nums[i + 1];
60+
}
5961

60-
// const answer = [];
61-
// for (let i = 0; i < n; i++) {
62-
// answer[i] = prefix[i] * suffix[i];
63-
// }
62+
const answer = [];
63+
for (let i = 0; i < n; i++) {
64+
answer[i] = prefix[i] * suffix[i];
65+
}
6466

65-
// return answer;
67+
return answer;
6668
}
6769
// TC: O(N)
6870
// SC: O(N)

0 commit comments

Comments
 (0)