๋ฌธ์ ๋งํฌ : https://leetcode.com/problems/add-two-numbers/description/
ย
๐ฅ๏ธย ์์ํ๋ฉฐ
๋ฌธ์ ๋ฅผ ์์ฝํ๋ฉด, ์ถ๋ ฅ๋๋ ๋ฐฐ์ด์ ๊ฐ
์ธ๋ฑ์ค์ ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ธ๋ฑ์ค ์์๋ค์ ๊ณฑ
์ด๋ค. ๊ทธ๋์ ๊ฐ์ฅ ๋จผ์ ์ ๊ทผํด๋ณผ ์ ์๋ ๋ฐฉ์์ ์ด์ค for๋ฌธ์ ์ด์ฉํด ๊ฐ ์ธ๋ฑ์ค์ ์์๋ฅผ ์ ์ธํ๊ณ ๊ณฑ์ ๊ตฌํ๋ ๋ฐฉ์์ด๋ค.class Solution: def calcMultiplex(self, nums: List[int]) -> int: sum = 1 for i in nums: sum *= i return sum def productExceptSelf(self, nums: List[int]) -> List[int]: res = [] for i in range(len(nums)): sum1 = self.calcMultiplex(nums[:i]) sum2 = self.calcMultiplex(nums[i + 1 :]) res.append(sum1 * sum2) return res
๋ฌผ๋ก ๋น์ฐํ๊ฒ๋ ๋ฌธ์ ์์
O(n)
๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ผ ํ์ผ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ค.ย
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ
O(n)
์ผ๋ก ํด๊ฒฐํ ์ ์์ง? ์๊ฐํ๋ค, ๊ทธ๋ฅ ๊ณต๊ฐ์ ์กฐ๊ธ ๋ ์ฐ๋ฉด ๋๊ฒ ๋ค๋ ์์ด๋์ด๊ฐ ๋์๋ค.# ์ ๋ ฅ : [1, 2, 3, 4] # ์ผ์ชฝ ๋์ ๊ณฑ ๊ณ์ฐ for i in range(1, n): left[i] = left[i - 1] * nums[i - 1] # [1, 1, 2, 6] # ์ค๋ฅธ์ชฝ ๋์ ๊ณฑ ๊ณ์ฐ for i in range(n - 2, -1, -1): right[i] = right[i + 1] * nums[i + 1] # [24, 12, 4, 1]
ย
์ด๋ฐ ์์ผ๋ก,
- ์ผ์ชฝ๋ถํฐ
๋ณธ์ธ์ ์์๋ฅผ ์ ์ธํ ๊ณฑ
- ์ค๋ฅธ์ชฝ๋ถํฐ
๋ณธ์ธ์ ์์๋ฅผ ์ ์ธํ ๊ณฑ
์ ๋ชจ๋ ๋ฏธ๋ฆฌ ๊ณ์ฐํ ๋ค์, ์ด ๋์ ๊ณฑํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋๋ค.
ย
ํ๋ํ๋ ๋ฏ์ด๋ณด๋ฉด ์ดํด๊ฐ ๊ฐ ๊ฒ์ด๋ค.. ๊ฒฐ๊ตญ ์ผ์ชฝ๋ถํฐ ๊ณฑ๊ณผ ์ค๋ฅธ์ชฝ๋ถํฐ ๊ณฑ์ ๋ณธ์ธ์ ์ ์ธํ ๊ณฑ์ด๋.
ย
โ๏ธย Python
from typing import List class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: n = len(nums) left = [1] * n right = [1] * n res = [1] * n # ์ผ์ชฝ ๋์ ๊ณฑ ๊ณ์ฐ for i in range(1, n): left[i] = left[i - 1] * nums[i - 1] # ์ค๋ฅธ์ชฝ ๋์ ๊ณฑ ๊ณ์ฐ for i in range(n - 2, -1, -1): right[i] = right[i + 1] * nums[i + 1] # ๊ฒฐ๊ณผ ๋ฆฌ์คํธ ๊ณ์ฐ for i in range(n): res[i] = left[i] * right[i] return res s = Solution() print(s.productExceptSelf(nums=[1, 2, 3, 4]))
โ๏ธย C++
#include <iostream> #include <vector> using namespace std; class Solution { public: vector<int> productExceptSelf(vector<int> &nums) { vector<int> left(nums.size()); vector<int> right(nums.size()); vector<int> res(nums.size()); for (int i = 1; i < nums.size(); ++i) left[i] = left[i - 1] * nums[i - 1]; for (int i = nums.size() - 2; i >= 0; --i) right[i] = right[i + 1] * nums[i + 1]; for (int i = 0; i < nums.size(); ++i) res[i] = left[i] * right[i]; return res; } };
ย
ย
๐ย ์๊ฐ
ย
๐ย ๋ถ๋ก
๐ย ์ฐธ๊ณ ๋ฌธํ
ย
๋๊ธ