๋ฆฌํธ์ฝ๋ LeetCode 17 Letter Combinations of a Phone Number
๋ฌธ์ ์ ํ์ด์ฌ python ํ์ด์
๋๋ค.
https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
๋ฌธ์
2์์ 9๊น์ง ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋ ์ ํ ๋ฒํธ๋ก ์กฐํฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ผ.
ํ์ด
# ํฐ ๋ฒํธ ๋ฌธ์ ์กฐํฉ : ๋ชจ๋ ์กฐํฉ ํ์ (DFS)
class Solution:
ย ย def letterCombinations(self, digits: str) -> List[str]:
ย ย ย ย def dfs(index, path):
ย ย ย ย ย ย # ๋๊น์ง ํ์ํ๋ฉด ๋ฐฑํธ๋ํน
ย ย ย ย ย ย if len(path) == len(digits):
ย ย ย ย ย ย ย ย result.append(path)
ย ย ย ย ย ย ย ย return
ย ย ย ย ย ย # ์
๋ ฅ๊ฐ ์๋ฆฟ์ ๋จ์ ๋ฐ๋ณต
ย ย ย ย ย ย for i in range(index, len(digits)):
ย ย ย ย ย ย ย ย # ์ซ์์ ํด๋นํ๋ ๋ชจ๋ ๋ฌธ์์ด ๋ฐ๋ณต
ย ย ย ย ย ย ย ย for j in dic[digits[i]]:
ย ย ย ย ย ย ย ย ย ย dfs(i+1, path+j) #path์ digits[i]์ ๋ํด์ ๊ฐ์ ธ๊ฐ
ย ย ย ย # ์์ธ ์ฒ๋ฆฌ
ย ย ย ย if not digits: # ์๋ฌด๊ฒ๋ ์์ ๋
ย ย ย ย ย ย return []
ย ย ย ย dic = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl",
ย ย ย ย ย ย ย ย "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"}
ย ย ย ย result = []
ย ย ย ย dfs(0, "")
ย ย ย ย return result
def dfs(index, path):
index
: ํ์ฌ ๋ช ๋ฒ์งธ ์ซ์๋ฅผ ์ฒ๋ฆฌ ์ค์ธ์ง ๋ํ๋path
: ์ง๊ธ๊น์ง ์กฐํฉํ ๋ฌธ์๋ค์ ์ ์ฅํ๋ ๋ฌธ์์ด ์๋ฅผ ๋ค์ด,'2' โ abc
,'3' โ def
์ด๋ฉด- ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์
'a'
๋ฅผ ์ ํ โpath = 'a'
- ๋ ๋ฒ์งธ ๋จ๊ณ์์
'd'
๋ฅผ ์ ํ โpath = 'ad'
- ๋๊น์ง ์กฐํฉ์ด ์๋ฃ๋๋ฉด โ
result.append('ad')
- ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์
์ฆ, path
๋ ํ์ฌ ๋ง๋ค๊ณ ์๋ ์กฐํฉ ์ค๊ฐ ๊ฒฐ๊ณผ์
๋๋ค.
์์
์
๋ ฅ: digits = "23"
๋์
๋๋ฆฌ:
dic = {"2": "abc", "3": "def"}
DFS ํ๋ฆ
dfs(0, ""):
โโ dfs(1, "a"):
โ โโ dfs(2, "ad") โ ๋ โ ์ ์ฅ
โ โโ dfs(2, "ae") โ ๋ โ ์ ์ฅ
โ โโ dfs(2, "af") โ ๋ โ ์ ์ฅ
โโ dfs(1, "b"):
โ โโ dfs(2, "bd") โ ๋ โ ์ ์ฅ
โ โโ dfs(2, "be") โ ๋ โ ์ ์ฅ
โ โโ dfs(2, "bf") โ ๋ โ ์ ์ฅ
โโ dfs(1, "c"):
โโ dfs(2, "cd") โ ๋ โ ์ ์ฅ
โโ dfs(2, "ce") โ ๋ โ ์ ์ฅ
โโ dfs(2, "cf") โ ๋ โ ์ ์ฅ
์ฌ๊ท ํธ์ถ์ ํ๋ฉด์ ์ด ๋ฌธ์์ด์ ์ ์ ๊ธธ๊ฒ ๋ง๋ค์ด ๊ฐ๋ค๊ฐ, digits
๊ธธ์ด์ ๊ฐ์์ง๋ฉด ๊ฒฐ๊ณผ์ ์ ์ฅํฉ๋๋ค.