Python/코딩 문제

[리트코드] 17. Letter Combinations of a Phone Number

green_ne 2022. 2. 1. 22:02

# 문제 설명

2~9까지의 수가 주어질 때, 나타날 수 있는 모든 가능한 문자 조합들을 반환해라.

단, 1은 주어지지 않는다.

 

# 입출력 예시

입력 출력
"23" ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
"" []
"2" ["a", "b", "c"]

 

# 코드 풀이 1.  key가 int인 경우

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        ltr = {2:'abc', 3:'def', 4:'ghi', 5:'jkl', 6:'mno', 7:'pqrs', 8:'tuv', 9:'wxyz'}
        answer = []
        
        def select(i, path):
            if len(path) >= len(digits):
                answer.append("".join(path))
                return
            
            for x in ltr[int(digits[i])]:
                path.append(x)
                select(i+1, path)
                path.pop()
                
        if digits:
            select(0, [])
        return answer

key가 int이면 Runtime 속도가 24ms로, str일 때보다 더 빠르다.

 

# 코드 풀이 2.  key가 str인 경우

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        ltr = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}
        answer = []
        
        def select(i, path):
            if len(path) >= len(digits):
                answer.append(path)
                return
            
            for x in ltr[digits[i]]: # 숫자에 해당하는 문자
                select(i+1, path+x)
                
        if digits:
            select(0, '')
        return answer

key가 str이면 더 가독성이 좋고, 직관적이다. 또 메모리가 13.8MB로 int일 때보다 더 적게 든다.

 

 

# 핵심 포인트

- list로 문자를 추가하려면 append()를 사용해야 하는데, str을 사용하면 +로 더 간단히 추가할 수 있다.

- dict의 key가 int형이면 더 빠르게 검색할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형