🔗 Problem Link
❔Thinking
- 2에서 9까지 숫자가 주어질 때, 각 숫자에 적힌 알파벳으로 가능한 조합을 모두 담은 리스트를 반환한다.
💻Solution
1. 조합을 활용한 풀이
from itertools import product
def letterCombinations(self, digits: str) -> List[str]:
if len(digits) == 0: # digit이 없을 때 예외처리
return []
phone_table = {
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']
}
# n에 digit에 적힌 알파벳 리스트로 담기
n = []
for dig in digits:
n.append(phone_table[int(dig)])
return [''.join(combi) for combi in list(product(*n))]
2. DFS를 활용한 풀이
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
phone_table = {
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 = []
stack = [(0, [])]
while stack:
index, chars = stack.pop()
if index == len(digits):
result.append("".join(chars))
else:
for char in phone_table[int(digits[index])]:
stack.append([index+1, chars + [char]])
return result
🗝️keypoint
- DFS 풀이를 위해서는, stack에 현재 문자열의 길이와 다음 숫자로 가능한 문자열을 모두 포함시켜야 한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Leetcode] 77. Combinations (0) | 2022.12.02 |
---|---|
[Leetcode] 46. Permutations (0) | 2022.12.02 |
[Leetcode] 200. Number of Islands (0) | 2022.12.01 |
[Programmers] Level 2. 행렬 테두리 회전하기 (0) | 2022.12.01 |
[Programmers] Level 3. 가장 먼 노드 (0) | 2022.12.01 |