백준 5622번 다이얼
문제
다이얼 전화기에서 숫자 1을 걸려면 2초가 걸리고, 숫자가 하나 커질 때마다 1초씩 더 걸린다. 각 숫자에는 알파벳이 배정되어 있다(2는 ABC, 3은 DEF, 4는 GHI, 5는 JKL, 6은 MNO, 7은 PQRS, 8은 TUV, 9는 WXYZ). 길이 2 이상 15 이하의 알파벳 대문자 단어가 주어질 때, 이 단어를 거는 데 필요한 최소 시간을 출력한다. 예를 들어 WA는 13, UNUCIC는 36이다.
풀이
알파벳마다 걸리는 시간이 정해져 있으므로 딕셔너리로 대응시키는 게 편하다고 판단했다. A부터 Z까지의 리스트를 만들고, 인덱스 구간별로 시간을 배정해 딕셔너리에 담는다. 규칙을 찾으려 했지만 보이지 않아 인덱스 번호로 직접 나눴다.
그다음 입력 단어의 글자를 하나씩 돌면서 딕셔너리의 값을 더하면 된다. 설계 이후에는 비교적 빨리 풀렸다.
text = input()
list_alpha = [chr(i) for i in range(ord('A'), ord('Z')+1)]
alpha_dict = dict()
for la in list_alpha:
if la in list_alpha[:3]:
alpha_dict[la] = 3
elif la in list_alpha[3:6]:
alpha_dict[la] = 4
elif la in list_alpha[6:9]:
alpha_dict[la] = 5
elif la in list_alpha[9:12]:
alpha_dict[la] = 6
elif la in list_alpha[12:15]:
alpha_dict[la] = 7
elif la in list_alpha[15:19]:
alpha_dict[la] = 8
elif la in list_alpha[19:22]:
alpha_dict[la] = 9
elif la in list_alpha[22:]:
alpha_dict[la] = 10
result = 0
for t in text:
result += alpha_dict[t]
print(result)