|
| 1 | +class Solution { |
| 2 | + // time: O(n), space: O(n) |
| 3 | + func productExceptSelf(_ nums: [Int]) -> [Int] { |
| 4 | + var resultFromFirst = [1] |
| 5 | + var resultFromLast = [1] |
| 6 | + // ๊ธฐ์ค ์์์ ์ผ์ชฝ ๊ณฑ์ resultFromFirst์ ์ ์ฅ |
| 7 | + // ๊ธฐ์ค ์์์ ์ค๋ฅธ์ชฝ ๊ณฑ์ resultFromLast์ ์ ์ฅ |
| 8 | + for i in 1..<nums.count { |
| 9 | + resultFromFirst.append(resultFromFirst[i-1] * nums[i-1]) |
| 10 | + resultFromLast.append(resultFromLast[i-1] * nums[nums.count - i]) |
| 11 | + } |
| 12 | + // ๊ฒฐ๊ณผ ๋ฐํ์ ์์๋ฅผ ์๊ฐํด์ |
| 13 | + //resultFromFirst๋ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง ์์๊น์ง, resultFromLast๋ ๋ง์ง๋ง ์์ ๋ถํฐ ์ฒซ๋ฒ์งธ ์์๊น์ง, ์๋ก๋ฅผ ๊ณฑํด์ค๋ค. |
| 14 | + return (0..<nums.count).map { resultFromFirst[$0] * resultFromLast[nums.count - $0 - 1] } |
| 15 | + } |
| 16 | +} |
| 17 | +//Input: nums = [1,2,3,4] |
| 18 | +//Output: [24,12,8,6] |
| 19 | +/* |
| 20 | + 2*3*4, 3*4, 4, 1 ์ค๋ฅธ์ชฝ ๋ถ๋ถ ๊ณฑ |
| 21 | + 1, 1, 1*2, 1*2*3 ์ผ์ชฝ ๋ถ๋ถ ๊ณฑ |
| 22 | +*/ |
| 23 | + |
| 24 | +// ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ O(1)๋ก๋ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค! (๊ฒฐ๊ณผ๋ฐฐ์ด ์ ์ธ) |
| 25 | +// ์์ด๋์ด๋ฅผ ์๊ฐํด๋ณด์. |
| 26 | +/* |
| 27 | + 1. ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ํ๋ ๋ง๋ ๋ค. |
| 28 | + 2. nums์ ์์๋ค์ ์ฌ์ฉํด ์ผ์ชฝ๋ถ๋ถ ๊ณฑ์ ๋จผ์ ๊ฒฐ๊ณผ๋ฐฐ์ด์ ์ ์ฅํ๋ค. |
| 29 | + 3. ์ค๋ฅธ์ชฝ ๋ถ๋ถ ๊ณฑ์ ์ฐจ๋ก๋๋ก ๊ณ์ฐ์ ๊ฒฐ๊ณผ๋ฐฐ์ด ์์์ ๊ณฑ์ฐ์ฐํด ์ ์ฅํ๋ค. |
| 30 | + 4. ๋ฐํ! |
| 31 | +*/ |
| 32 | +class Solution { |
| 33 | + func productExceptSelf(_ nums: [Int]) -> [Int] { |
| 34 | + var result = Array(repeating: 1, count: nums.count) |
| 35 | + for i in 1..<nums.count { |
| 36 | + // ์๋ ํ๋๋๋ก ์ผ์ชฝ ๋ถ๋ถ ๊ณฑ์ผ๋ก ์ด๊ธฐํ |
| 37 | + result[i] = result[i-1] * nums[i-1] |
| 38 | + } |
| 39 | + |
| 40 | + var temp = 1 // ์ค๋ฅธ์ชฝ ๊ณฑ ๊ฐ์ ์ ์ฅํด ๋ ๋ณ์ |
| 41 | + for i in 1...nums.count { |
| 42 | + // ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ถํฐ self ์ ์ค๋ฅธ์ชฝ ๋ถ๋ถ ๊ณฑ ์์ |
| 43 | + result[nums.count - i] *= temp |
| 44 | + // ์ฐ์ฐ ํ temp์ nums์ ์ค๋ฅธ์ชฝ ์์ ํ๋์ฉ ๊ณฑํ๊ธฐ |
| 45 | + temp *= nums[nums.count - i] |
| 46 | + } |
| 47 | + |
| 48 | + return result |
| 49 | + } |
| 50 | +} |
0 commit comments