๐ ๋ชฉ์ฐจ
๐ค ๋ฌธ์ : Letter Combinations of a Phone Number | LeetCode 793
๋ฌธ์ : https://leetcode.com/explore/interview/card/top-interview-questions-medium/109/backtracking/793/
์ซ์ -> 3~4๊ฐ์ ๋ฌธ์ ๋ก ๋งคํ๋ ๋
์ซ์ input์ด ์ฃผ์ด์ง๋ฉด ๊ฐ๋ฅํ ๋ชจ๋ ๋ฌธ์ output์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋ฐํํ๋ ๋ฌธ์ ์ ๋๋ค.
๐ก ํ์ด
1. ์ ๊ทผ - BFS? DFS?
BFS : ๋๋น ์ฐ์ ํ์์ ๋งน๋ชฉ์ ํ์๋ฐฉ๋ฒ์ ํ๋๋ก ์์ ์ ์ ์ ๋ฐฉ๋ฌธํ ํ ์์ ์ ์ ์ ์ธ์ ํ ๋ชจ๋ ์ ์ ๋ค์ ์ฐ์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ
DFS : ํ๋์ ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ ๋ค์์ผ ๋ค๋ฅธ ์ด์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ
input์ด 23์ด๋ผ๊ณ ํ ๋ BFS, DFS๋ ๊ฐ๊ฐ ์๋์ ์์๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋๊ฐ๋๋ค.
BFS
- ์ฒซ๋ฒ์งธ ์๋ฆฌ์ ์ฌ ์ ์๋ ๋ฌธ์ ํ์ => a b c
- ๋๋ฒ์งธ ์๋ฆฌ์ ์ฌ ์ ์๋ ๋ฌธ์ ํ์ => ad ae af bd be bf cd ce cf
DFS
- a๋ก ์์ํ๋ ๋ชจ๋ ๊ฒฝ์ฐ ํ์ => ad ae af
- b๋ก ์์ํ๋ ๋ชจ๋ ๊ฒฝ์ฐ ํ์ => ad ae af bd be bf
- c๋ก ์์ํ๋ ๋ชจ๋ ๊ฒฝ์ฐ ํ์ => ad ae af bd be bf cd ce cf
2. ํ์ด1- recursion์ ํ์ฉํ DFS
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
phone_pad = {"0" : [" "], "2": ['a','b','c'], "3": ['d','e','f'], "4": ['g','h','i'], "5": ['j','k','l'], "6": ['m','n','o'], "7": ['p','q','r', 's'],"8": ['t','u','v'], "9": ['w','x','y', 'z'] }
result = []
digit_length = len(digits)
if digit_length is 0: return []
def makeString(given_string, index):
if index is digit_length-1:
for c in phone_pad[digits[index]]:
result.append(given_string+c)
else:
for c in phone_pad[digits[index]]:
makeString(given_string+c, index+1)
makeString('', 0)
return result
runtime์ 63ms๋ก ํ์ 8%์ ์ํ๋ค์.
recursiveํ๊ฒ call stack์ ๋ง๋ค์ด๋๊ฐ๋ ์ฐ์ฐ ์์ฒด๊ฐ expensiveํ๊ธฐ ๋๋ฌธ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
2. ํ์ด2- DFS
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
phone_pad = {"0" : [" "], "2": ['a','b','c'], "3": ['d','e','f'], "4": ['g','h','i'], "5": ['j','k','l'], "6": ['m','n','o'], "7": ['p','q','r', 's'],"8": ['t','u','v'], "9": ['w','x','y','z'] }
result = phone_pad[digits[0]] if digits else []
for d in digits[1:]:
new_result = []
for c in phone_pad[d]:
for str in result:
new_result.append(str+c)
result = new_result
return result
3์ค ํฌ๋ฌธ์ ํ์ฉํ DFS๋ฐฉ๋ฒ์ ๋๋ค.
ํ์ ํ์๋ ๋์ผํ ๊ฒ ๊ฐ์๋ฐ call stack์ด ์์ด์์ธ์ง ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ก์ต๋๋ค.