문제 링크: https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
파이썬 소스: https://bit.ly/4cPkcyq
전화기의 각 숫자에서는 3~4개의 알파벳이 맵핑되어 있습니다. 2개 숫자가 digits에 저장되어 있으면, 첫번째 숫자에 맵핑된 알파벳과, 두번째 숫자에 맵핑된 알파벳을 사용해서 길이가 2인 조합을 구하는 문제입니다.
다만 이 조합을 구할 때는 첫번째 글자는 첫번째 숫자에 맵핑된 알파벳에서 가지고 오고, 두번째 글자는 두번째 숫자에 맵핑된 알파벳에서 가지고 와야 합니다.
만약 변수 digits에 길이가 3 이상이라면, 첫번째, 두번째 숫자로 구한 조합에, 세번째 숫자에 맵핑된 알파벳을 사용해서, 길이가 3인 조합을 구합니다.
이 문제에서 예외로 처리해야 하는 부분은, 변수 digits의 길이가 0인 경우는 예외로 아래와 같이 빈 리스트 []를 리턴합니다.
if len(digits) == 0: |
문제를 푸는 코드를 작성하기에 앞서서, dt 딕셔너리 변수에, 각 숫자에 해당하는 알파벳의 리스트를 만들어 줍니다.
dt = {} |
여기서 부터는 변수 digits의 길이가 1 이상이라고 가정할 수 있습니다. 앞에서 길이가 0인 경우는 예외로 처리하여, 리턴했기 때문입니다.
제일 앞에 있는 문자를 하나 받아와서, 숫자로 변환해서, output에 해당 숫자의 알파벳을 저장합니다.
output = dt[int(digits[:1])] |
이제 두번째 문자부터 하나씩 처리해 보겠습니다. 만약에 두번째 문자가 없다면, for 루프는 실행되지 않고, output이 그대로 리턴됩니다.
for c in digits[1:]:
|
문자를 숫자로 변환해서, idx에 저장합니다. 임시로 저장할 변수 output2 리스트를 선언합니다. 리스트 output에 있는 1개 를 꺼내서, dt[idx]가 가리키는 알파벳과 하나씩 더해줍니다. 더한 결과는 output2에 넣습니다.
안쪽의 for 루프가 끝나면, output 에 output2를 저장해서, 다음번 for 루프에서 output값이 사용될 수 있게 해줍니다. 이렇게 루프를 모두 돌고 나서, output을 리턴해주면 변수 digits에 해당하는 알파벳 조합을 구할 수 있습니다.
코데풀 유튜브 구독 부탁드립니다.
https://www.youtube.com/@codapul
from typing import List |
댓글 없음:
댓글 쓰기