Solution (Brute Force)
from typing import List
class Solution:
# dict() ๋ฐฉ์
# time: O(N)
# Runtime: 59ms
# Beats: 86.75%
# ์๋ฐ Map์ผ๋ก ํ์์ ๋ ์ง์ง ๋ถํธํ๋๋ฐ ์ญ์ ํ์ด์ฌ
def twoSum(self, nums: List[int], target: int) -> List[int]:
answer = []
# ํ๋ฒ ์ ์๊ฐํด ๋ณด์
# ์ ์์ ํ์ ๋ฐฉ์์ฒ๋ผ ๊ผญ ๋ ๊ฐ๋ฅผ ๊ฐ์ง๊ณ ๋น๊ตํ ํ์๊ฐ ์๊ณ
# target์ด ์ด๋ฏธ ์์๊ฐ์ผ๋ก ์ฃผ์ด์ ธ ์์ผ๋,
# target์์ nums์ ์์๋ฅผ ๋นผ์ฃผ๋ฉด์ ๋น๊ต๋ฅผ ํ๋ฉด ๋จ
# ๊ทธ ์ฐจ์ด์ ๊ฐ์ด ๋ค๋ฅธ ์์์ ์์ผ๋ฉด
# ๋น๊ต๋ฅผ ํ ์๋ฆฌ์ ๋ค๋ฅธ ์์์ ์๋ฆฌ๋ฅผ ๋ฆฌํดํ๋ฉด ๋จ
# ์ค์! ์ด๋์ key์ value๋ ๊ฐ๊ฐ ๋ฐ๋๋ก ์๊ฐํ์
# 0, 1, 2, 3์ index๊ฐ value์ ๊ฐ๋๋ก ๋ฐ๋๋ก ์๊ฐ
nums_dict = {}
# key์ value ํ๊บผ๋ฒ์ ๋ฝ์์ค๋ ๋ฐฉ๋ฒ
# list์์ ๋ฝ์์ค๋ ๊ฑฐ๋ key๋ ๊ทธ index๊ฐ ๋ ๊ฒ์ด๊ณ
for index, value in enumerate(nums):
# target์์ nums์ ์์๋ฅผ ๋นผ์ฃผ๋ฉด์ ๋น๊ต
difference = target - value
# Only one valid answer exists. < ์ด ์ ํ์ด ์์ผ๋
# ๊ฐ์ index๋ฅผ ๊ฐ์ง์ง ์๊ฒ dict ์ฐจ์ด์ ์ value๊ฐ key๊ฐ์ด๋ ๊ฐ์ง ์๋๋ก
# ์ฐจ์ด๊ฐ dict ์์ ์กด์ฌํ๋์ง ํ์ธ
if difference in nums_dict:
# ์กด์ฌํ๋ค๋ฉด index์ธ key๋ฅผ ์ป์ ์ ์์ผ๋ฏ๋ก ๋ฐฐ์ด์ ์ ์ฅ
# difference key๊ฐ์ธ value๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
answer = [index, nums_dict[difference]]
else:
# ์กด์ฌํ์ง ์๋๋ค๋ฉด dict ์ ์ธํ ๋ ๋งํ ๋๋ก
# index์ value๋ฅผ ๋ฐ๋๋ก ์ค์ ํด์ ๊ณ์ ์ถ๊ฐํด์ฃผ๊ธฐ
nums_dict[value] = index
# ์ด ๋ฌธ์ ์์ value์ index๋ฅผ ๋ฐ๋๋ก ์๊ฐํ ์ด์ ๋
# dict์์ key๋ฅผ ๊ฐ์ง๊ณ value๋ฅผ ์ฐพ๋ ๊ฑด ์ฝ์ง๋ง,
# value๋ฅผ ๊ฐ์ง๊ณ key๋ฅผ ์ฐพ๋ ๊ฑด ๋ณต์กํ๊ธฐ ๋๋ฌธ
return answer
Solution (Hash Table)
from typing import List
class Solution:
# dict() ๋ฐฉ์
# time: O(N)
# Runtime: 59ms
# Beats: 86.75%
# ์๋ฐ Map์ผ๋ก ํ์์ ๋ ์ง์ง ๋ถํธํ๋๋ฐ ์ญ์ ํ์ด์ฌ
def twoSum(self, nums: List[int], target: int) -> List[int]:
answer = []
# ํ๋ฒ ์ ์๊ฐํด ๋ณด์
# ์ ์์ ํ์ ๋ฐฉ์์ฒ๋ผ ๊ผญ ๋ ๊ฐ๋ฅผ ๊ฐ์ง๊ณ ๋น๊ตํ ํ์๊ฐ ์๊ณ
# target์ด ์ด๋ฏธ ์์๊ฐ์ผ๋ก ์ฃผ์ด์ ธ ์์ผ๋,
# target์์ nums์ ์์๋ฅผ ๋นผ์ฃผ๋ฉด์ ๋น๊ต๋ฅผ ํ๋ฉด ๋จ
# ๊ทธ ์ฐจ์ด์ ๊ฐ์ด ๋ค๋ฅธ ์์์ ์์ผ๋ฉด
# ๋น๊ต๋ฅผ ํ ์๋ฆฌ์ ๋ค๋ฅธ ์์์ ์๋ฆฌ๋ฅผ ๋ฆฌํดํ๋ฉด ๋จ
# ์ค์! ์ด๋์ key์ value๋ ๊ฐ๊ฐ ๋ฐ๋๋ก ์๊ฐํ์
# 0, 1, 2, 3์ index๊ฐ value์ ๊ฐ๋๋ก ๋ฐ๋๋ก ์๊ฐ
nums_dict = {}
# key์ value ํ๊บผ๋ฒ์ ๋ฝ์์ค๋ ๋ฐฉ๋ฒ
# list์์ ๋ฝ์์ค๋ ๊ฑฐ๋ key๋ ๊ทธ index๊ฐ ๋ ๊ฒ์ด๊ณ
for index, value in enumerate(nums):
# target์์ nums์ ์์๋ฅผ ๋นผ์ฃผ๋ฉด์ ๋น๊ต
difference = target - value
# Only one valid answer exists. < ์ด ์ ํ์ด ์์ผ๋
# ๊ฐ์ index๋ฅผ ๊ฐ์ง์ง ์๊ฒ dict ์ฐจ์ด์ ์ value๊ฐ key๊ฐ์ด๋ ๊ฐ์ง ์๋๋ก
# ์ฐจ์ด๊ฐ dict ์์ ์กด์ฌํ๋์ง ํ์ธ
if difference in nums_dict:
# ์กด์ฌํ๋ค๋ฉด index์ธ key๋ฅผ ์ป์ ์ ์์ผ๋ฏ๋ก ๋ฐฐ์ด์ ์ ์ฅ
# difference key๊ฐ์ธ value๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
answer = [index, nums_dict[difference]]
else:
# ์กด์ฌํ์ง ์๋๋ค๋ฉด dict ์ ์ธํ ๋ ๋งํ ๋๋ก
# index์ value๋ฅผ ๋ฐ๋๋ก ์ค์ ํด์ ๊ณ์ ์ถ๊ฐํด์ฃผ๊ธฐ
nums_dict[value] = index
# ์ด ๋ฌธ์ ์์ value์ index๋ฅผ ๋ฐ๋๋ก ์๊ฐํ ์ด์ ๋
# dict์์ key๋ฅผ ๊ฐ์ง๊ณ value๋ฅผ ์ฐพ๋ ๊ฑด ์ฝ์ง๋ง,
# value๋ฅผ ๊ฐ์ง๊ณ key๋ฅผ ์ฐพ๋ ๊ฑด ๋ณต์กํ๊ธฐ ๋๋ฌธ
return answer
Leave a comment