< All posts

17. Letter Combinations of a Phone Number

문제 μ„€λͺ…

숫자 λ¬Έμžμ—΄μ΄ μ£Όμ–΄μ§€λ©΄ ν•΄λ‹Ή μˆ«μžμ— λ§€ν•‘λœ λͺ¨λ“  κ°€λŠ₯ν•œ 문자 쑰합을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

17

풀이 및 ν•΄μ„€

이 λ¬Έμ œλŠ” λ°±νŠΈλž˜ν‚Ή(Backtracking) 기법을 μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각 μˆ«μžμ— ν•΄λ‹Ήν•˜λŠ” λ¬Έμžλ“€μ„ λ§€ν•‘ν•œ ν›„, μž¬κ·€μ μœΌλ‘œ κ°€λŠ₯ν•œ λͺ¨λ“  쑰합을 μƒμ„±ν•©λ‹ˆλ‹€.

풀이

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return []
        
        graph = {
            '2' : "abc",
            '3' : "def",
            '4' : "ghi",
            '5' : "jkl",
            '6' : "mno",
            '7' : "pqrs",
            '8' : "tuv",
            '9' : "wxyz",
        }

        res = []

        def backtrack(i,path):
            # basecase: built one letter per digit
            if i == len(digits):
                res.append(path)
                return
            
            # recursive step: expand current digit
            cur_digit = digits[i]
            for ch in graph[cur_digit]:
                backtrack(i+1, path+ch)
        
        backtrack(0,"")
        return res
  • λ¨Όμ €, μˆ«μžμ— ν•΄λ‹Ήν•˜λŠ” λ¬Έμžλ“€μ„ λ§€ν•‘ν•œ λ”•μ…”λ„ˆλ¦¬λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • λ°±νŠΈλž˜ν‚Ή ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ μž¬κ·€μ μœΌλ‘œ κ°€λŠ₯ν•œ λͺ¨λ“  쑰합을 μƒμ„±ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ‚¬λ‘€λ‘œ, ν˜„μž¬ μΈλ±μŠ€κ°€ μž…λ ₯ 숫자의 길이와 κ°™μ•„μ§€λ©΄ ν˜„μž¬ 경둜λ₯Ό κ²°κ³Ό λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
  • μž¬κ·€ λ‹¨κ³„μ—μ„œλŠ” ν˜„μž¬ μˆ«μžμ— ν•΄λ‹Ήν•˜λŠ” λ¬Έμžλ“€μ„ μˆœνšŒν•˜λ©°, 각 문자λ₯Ό κ²½λ‘œμ— μΆ”κ°€ν•˜κ³  λ‹€μŒ 인덱슀둜 μ΄λ™ν•©λ‹ˆλ‹€.
  • μ΅œμ’…μ μœΌλ‘œ λͺ¨λ“  κ°€λŠ₯ν•œ 쑰합을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

Complexity Analysis

c

μ‹œκ°„ λ³΅μž‘λ„

  • O(3^N * 4^M); N은 3개의 문자λ₯Ό λ§€ν•‘ν•˜λŠ” 숫자의 수, M은 4개의 문자λ₯Ό λ§€ν•‘ν•˜λŠ” 숫자의 μˆ˜μž…λ‹ˆλ‹€. 각 쑰합을 μƒμ„±ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ€ μ‘°ν•©μ˜ 총 μˆ˜μ— λΉ„λ‘€ν•©λ‹ˆλ‹€.

곡간 λ³΅μž‘λ„

  • O(N); μž¬κ·€ 호좜 μŠ€νƒμ˜ μ΅œλŒ€ κΉŠμ΄λŠ” μž…λ ₯ 숫자의 길이에 λΉ„λ‘€ν•©λ‹ˆλ‹€.

Constraint Analysis

Constraints:
1 <= digits.length <= 4
digits[i] is a digit in the range ['2', '9'].

References

Β© 2025 HyunJoon Sung. All Rights Reserved.

GitHub