-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
๋ฌธ์ ์ค๋ช | Product of Array Except Self
์ ์ ๋ฐฐ์ด nums๊ฐ ์ฃผ์ด์ง ๋, ๊ฐ ์์์ ์์น์ ํด๋น ์์๋ฅผ ์ ์ธํ ๋ชจ๋ ์์๋ค์ ๊ณฑ์ ๋ด์ ๋ฐฐ์ด์ ๋ฐํํ๋ ๋ฌธ์
๐ ์ ์ฝ์กฐ๊ฑด
- ๋๋์ ์ฐ์ฐ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- O(n) ์๊ฐ ๋ณต์ก๋๋ก ํด๊ฒฐ
- O(1) ์ถ๊ฐ ๊ณต๊ฐ ๋ณต์ก๋๋ก ํด๊ฒฐ
๐ก ์์
- Input:
[1,2,3,4]- Output:
[24,12,8,6] - ์ค๋ช
:
- 1๋ฒ ์์น: 2 * 3 * 4 = 24
- 2๋ฒ ์์น: 1 * 3 * 4 = 12
- 3๋ฒ ์์น: 1 * 2 * 4 = 8
- 4๋ฒ ์์น: 1 * 2 * 3 = 6
- Output:
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
Step 1: ๋ฌธ์ ์ดํดํ๊ธฐ
-
์์ ์์๋ฅผ ํตํด ์ดํดํ๊ธฐ
[1,2,3,4]โ[24,12,8,6]- ๊ฐ ์์น์ ๊ฐ์ ์์ ์ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ์์์ ๊ณฑ
-
์ ์ฝ์ฌํญ ๊ฒํ :
- ๋๋์ ์์ด ๊ตฌํํด์ผ ํจ
- O(N) ์๊ฐ ๋ณต์ก๋ ํ์
- O(1) ์ถ๊ฐ ๊ณต๊ฐ ๋ณต์ก๋ ํ์
Step 2: ์ ๊ทผ ๋ฐฉ๋ฒ
-
์ง๊ด์ ์ผ๋ก ์๊ฐํ๊ธฐ
- ๊ฐ์ฅ ๋จ์ํ ๋ฐฉ๋ฒ์ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง, ์๊ฐ๋ณต์ก๋๊ฐ O(Nยฒ)
- O(N)์ผ๋ก ํด๊ฒฐํ๋ ค๋ฉด ๋ฐฐ์ด์ ํ ๋ฒ๋ง ์ํ
-
๋ฌธ์ ์ํฉ ๋จ์ํ
- ๊ฐ ์์น์ ๊ฐ์ "์ผ์ชฝ ์์๋ค์ ๊ณฑ" ร "์ค๋ฅธ์ชฝ ์์๋ค์ ๊ณฑ"์ผ๋ก ์๊ฐ
- ์:
[1,2,3,4]์์ 3๋ฒ์งธ ์์น(๊ฐ 3)์ ๊ฒฐ๊ณผ๋ (1ร2) ร (4) = 8
-
์๊ณ ๋ฆฌ์ฆ ํ ๊ตฌ์
1. ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ ๊ณฑ ๊ณ์ฐ i = 0, prefix = 1 โ res[i] = prefix (ํ์ฌ ์์น ์ผ์ชฝ์ ๋ชจ๋ ์์ ๊ณฑ) โ prefix *= nums[i] (๋ค์ ์์น๋ฅผ ์ํ ๋์ ๊ณฑ ์ ๋ฐ์ดํธ) โ i++ ํ๊ณ ๋ฐ๋ณต 2. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋์ ๊ณฑ ๊ณ์ฐ i = n-1, postfix = 1 โ res[i] *= postfix (๊ธฐ์กด ๊ฐ์ ์ค๋ฅธ์ชฝ ์์๋ค์ ๊ณฑ ๊ณฑํ๊ธฐ) โ postfix *= nums[i] (๋ค์ ์์น๋ฅผ ์ํ ๋์ ๊ณฑ ์ ๋ฐ์ดํธ) โ i-- ํ๊ณ ๋ฐ๋ณต
Step 3: ์ฝ๋ ์ค๊ณ
- ๊ฒฐ๊ณผ ๋ฐฐ์ด
res์์ฑ - ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ํํ๋ฉฐ ์ผ์ชฝ ๋์ ๊ณฑ ์ ์ฅ
prefix๋ณ์๋ฅผ 1๋ก ์ด๊ธฐํ- ๊ฐ ์์น์
prefix๊ฐ ์ ์ฅ ํprefix์ ํ์ฌ ๊ฐ ๊ณฑํ๊ธฐ
- ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ํํ๋ฉฐ ์ค๋ฅธ์ชฝ ๋์ ๊ณฑ ๋ฐ์
postfix๋ณ์๋ฅผ 1๋ก ์ด๊ธฐํ- ๊ฐ ์์น์ ๊ฐ์
postfix๊ณฑํ๊ธฐ ํpostfix์ ํ์ฌ ๊ฐ ๊ณฑํ๊ธฐ
- ๊ฒฐ๊ณผ ๋ฐฐ์ด ๋ฐํ
Step 4: ์ฝ๋ ๊ตฌํ
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
const res = Array(nums.length);
// ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ ๊ณฑ ๊ณ์ฐ
let prefix = 1;
for(let i = 0; i < nums.length; i++) {
res[i] = prefix;
prefix *= nums[i];
}
// ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๋์ ๊ณฑ ๊ณ์ฐ
let postfix = 1;
for(let i = nums.length - 1; i >= 0; i--) {
res[i] *= postfix; // ์ผ์ชฝ ๋์ ๊ณฑ์ ์ค๋ฅธ์ชฝ ๋์ ๊ณฑ ๊ณฑํ๊ธฐ
postfix *= nums[i];
}
return res;
};๋ณต์ก๋ ๋ถ์
- ์๊ฐ ๋ณต์ก๋: O(N) - ๋ฐฐ์ด์ ๋ ๋ฒ ์ํํ์ง๋ง ๊ฐ๊ฐ O(N)์ด๋ฏ๋ก ์ด ๋ณต์ก๋๋ O(N)
- ๊ณต๊ฐ ๋ณต์ก๋: O(1) - ๊ฒฐ๊ณผ ๋ฐฐ์ด ์ธ ์ถ๊ฐ ๋ฐฐ์ด ์์ด ๋ณ์๋ง ์ฌ์ฉ
๊ฒ์ฆ
- ์์
[1,2,3,4]๋ก ์คํํด๋ณด๊ธฐ:- ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ ํ: res = [1, 1, 2, 6]
- ๋ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ ํ: res = [24, 12, 8, 6]