미소를뿌리는감자의 코딩

[leetcode 2024/02/15] 17. Letter Combinations of a Phone Number 본문

코딩 테스트/leetcode

[leetcode 2024/02/15] 17. Letter Combinations of a Phone Number

미뿌감 2024. 2. 15. 15:29
728x90

https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

1. 접근 방법

이번 문제는 DFS 를 이용하는 문제라고 파악하였다. 

왜냐하면, 각각의 letter 마다 이어지는 여러가지의 수가 있기 때문이다.

 

우선 숫자에 따라 연결된 alphabet들을 dictionary로 정리해주었다.

num_dict = { '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']}

 

이제 dfs를 구성해줄 차례이다.

 

1. 탈출 조건:

len(digits) 가 dfs를 반복한 횟수와 같을 때로 정했다.

 

2. dfs ( dfs 반복 횟수, 연결되어지는 문자열) 로 구성했다.

 

처음부터 순서를 시각화해서 나타내보도록 하겠다.

 

digits = "23" 인 것을 예로 들어볼 것이다.

 

digits[0] -> '2'

digits[1] -> '3' 일 것이다.

 

for char in num_dict[digits[0]] 에서 char은 순서대로 'a', 'b', 'c' 를 내뱉을 것이다.

이때 path = "" 라는 문자열을 넣는 곳에, path + char를 통해 각각 문자를 넣어준다.

이를 다시 dfs로 반환하여, digits[1] 조건에서도 실행하도록 한다.

 

이런식으로 구성되게 된다.

 

2. 코드

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if digits == "":
            return []
        
        num_dict = { '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']}

        def dfs(index, path):
            if index == len(digits):
                res.append(path)
                return

            for char in num_dict[digits[index]]:
                dfs(index + 1, path + char)

        res = []
        dfs(0, "")

        return res
728x90