Skip to content

Commit dc1b7af

Browse files
committed
3. Product of Array Except Self
1 parent 23bfc3d commit dc1b7af

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
function productExceptSelf(nums: number[]): number[] {
2+
/* #Solution 1
3+
* sum: ์ „์ฒด ๊ณฑ์„ ๊ตฌํ•œ๋‹ค.
4+
* zeroCount: 0์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ์„ผ๋‹ค.
5+
* 1. ์ž์‹ ์ด 0์ด๋ฉด,
6+
* 1-1. ์ž์‹ ์ด์™ธ์˜ 0์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ์œผ๋ฉด 0์„ return
7+
* 1-2. ์ž์‹  ์ด์™ธ์— 0์ด ์—†์œผ๋ฉด ์ „์ฒด ๊ณฑ์„ return
8+
* 2. ์ž์‹ ์ด 0์ด ์•„๋‹ˆ๋ฉด
9+
* 2-1. zeroCount๊ฐ€ ์žˆ๋Š”์ง€ ๋ณด๊ณ  ์žˆ์œผ๋ฉด 0์„ return
10+
* 2-2. zero๊ฐ€ ์—†์œผ๋ฉด sum/self๋ฅผ return
11+
*/
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);
21+
22+
const hasZero = zeroCount > 0;
23+
24+
if (zeroCount === nums.length) return Array(nums.length).fill(0);
25+
26+
return nums.map((n) => {
27+
if (n === 0) {
28+
// ์ž์‹  ์ด์™ธ์— 0์ด ์žˆ์„๋•Œ
29+
if (zeroCount - 1 > 0) {
30+
return 0;
31+
}
32+
33+
return sum;
34+
}
35+
36+
if (hasZero) return 0;
37+
return sum / n;
38+
});
39+
// TC: O(N)
40+
// SC: O(N)
41+
42+
/* #Solution 2
43+
* 1. prefix: ์ž์‹ ์„ ์ œ์™ธํ•œ ์ž๊ธฐ ์ธ๋ฑ์Šค ์•ž๊นŒ์ง€์˜ ๊ณฑ์„ ์ €์žฅํ•œ๋‹ค.
44+
* 2. suffix: ์ž์‹ ์„ ์ œ์™ธํ•œ ์ž๊ธฐ ๋’ค๊นŒ์ง€์˜ ๊ณฑ์„ ์ €์žฅํ•œ๋‹ค.
45+
* 3. answer[i] = prefix[i] * suffix[i]
46+
*/
47+
// const n = nums.length;
48+
49+
// const prefix = new Array(n).fill(1);
50+
// const suffix = new Array(n).fill(1);
51+
52+
// for (let i = 1; i < n; i++) {
53+
// prefix[i] = prefix[i - 1] * nums[i - 1];
54+
// }
55+
56+
// for (let i = n - 2; i >= 0; i--) {
57+
// suffix[i] = suffix[i + 1] * nums[i + 1];
58+
// }
59+
60+
// const answer = [];
61+
// for (let i = 0; i < n; i++) {
62+
// answer[i] = prefix[i] * suffix[i];
63+
// }
64+
65+
// return answer;
66+
}
67+
// TC: O(N)
68+
// SC: O(N)

0 commit comments

Comments
ย (0)