Skip to content

Commit 92777cc

Browse files
committed
Product of Array Except Self solution
1 parent 547e881 commit 92777cc

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* ๋ฌธ์ œ: ๋ฐฐ์—ด์—์„œ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์›์†Œ์˜ ๊ณฑ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ•˜๊ธฐ
3+
* ์ œ์•ฝ์กฐ๊ฑด: ๋‚˜๋ˆ—์…ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ’€์–ด์•ผ ํ•จ
4+
*
5+
* Brute Force ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ๊ณฑ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ,
6+
* ์ด๋Š” O(n^2) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์ œ์•ฝ์กฐ๊ฑด์— ์–ด๊ธ‹๋‚จ
7+
*
8+
* O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”,
9+
* ๋‘ ๋ฒˆ์˜ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ๊ฐ ์›์†Œ์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•œ ํ›„,
10+
* ์ตœ์ข…์ ์œผ๋กœ ๋‘ ๊ณฑ์„ ๊ณฑํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
11+
*
12+
* ์ด ๋ฐฉ๋ฒ•์€ ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ,
13+
* ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์›์†Œ์˜ ์™ผ์ชฝ ๊ณฑ์„ ์ €์žฅํ•œ ํ›„
14+
* ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๊ณฑํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋จ
15+
*
16+
* ์ ‘๊ทผ๋ฐฉ๋ฒ•:
17+
* 1. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ˆ„์  ๊ณฑ์„ ๊ณ„์‚ฐ (prefix ๊ณฑ).
18+
* 2. ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋ˆ„์  ๊ณฑ์„ ๊ณ„์‚ฐ (suffix ๊ณฑ).
19+
* 3. ๊ฐ ์œ„์น˜ i์— ๋Œ€ํ•ด i ์œ„์น˜ ์ด์ „๊นŒ์ง€์˜ prefix ๊ณฑ๊ณผ i ์œ„์น˜ ์ดํ›„์˜ suffix ๊ณฑ์„ ๊ณฑํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ
20+
*/
21+
22+
/**
23+
* @param {number[]} nums - ์ž…๋ ฅ ๋ฐฐ์—ด
24+
* @return {number[]} - ๊ฒฐ๊ณผ ๋ฐฐ์—ด (answer[i]๋Š” nums[i]๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์›์†Œ์˜ ๊ณฑ)
25+
*/
26+
var productExceptSelf = function (nums) {
27+
const n = nums.length;
28+
29+
// ์ตœ์ข… ๋ฆฌํ„ด ํ•  ๊ฒฐ๊ณผ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” (O(1) ์ถ”๊ฐ€ ๊ณต๊ฐ„์„ ์œ„ํ•ด ์ถœ๋ ฅ ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉ)
30+
const result = Array.from({ length: n }, () => 1);
31+
32+
let leftProduct = 1;
33+
for (let i = 0; i < n; i++) {
34+
result[i] = leftProduct; // ํ˜„์žฌ ์œ„์น˜ ์ด์ „๊นŒ์ง€์˜ ๋ˆ„์  ๊ณฑ ์ €์žฅ
35+
leftProduct *= nums[i]; // ๋‹ค์Œ ์œ„์น˜๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์›์†Œ ๊ณฑํ•ด์„œ ์ค‘๊ฐ„๊ฒฐ๊ณผ(result) ์—…๋ฐ์ดํŠธ
36+
}
37+
38+
let rightProduct = 1;
39+
for (let i = n - 1; i >= 0; i--) {
40+
result[i] *= rightProduct; // ํ˜„์žฌ ๊ฒฐ๊ณผ์— ์˜ค๋ฅธ์ชฝ ๋ˆ„์  ๊ณฑ์„ ๊ณฑํ•ด์คŒ
41+
rightProduct *= nums[i]; // ๋‹ค์Œ ์œ„์น˜๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์›์†Œ ๊ณฑํ•จ
42+
}
43+
44+
return result;
45+
};

0 commit comments

Comments
ย (0)