백준 5622번_파이썬 알고리즘
Q. 백준 5622. 다이얼
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
(1) 입력 : 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
(2) 출력 : 첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.
A. 풀이
- 각 숫자에 문자열이 할당된다는 특성을 활용하여 문제를 해결한다.
# Q 백준 5622. 다이얼 ★★
alpha_list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
nm_list = list(input())
tm = 0
for i in range(len(nm_list)):
for j in range(len(alpha_list)):
if nm_list[i] in alpha_list[j]:
tm += j + 3
print(tm)
1) 변수 선언부
- 먼저 각 숫자에 대응하는 문자들을 모두 리스트에 담는다.
alpha_list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
- 상근이 할머니가 기억했던 문자를 입력받아 각 요소를 쪼개어 리스트로 담는다.
- 숫자를 눌렀을 때 시간을 카운트하기 위해 tm이라는 변수를 생성한다.
2) 반복문(for문)
- 먼저 상근이 할머니가 입력한 문자를 하나씩 빼내어 alpha_list의 인덱싱마다 각 요소에 있는지 함수 in을 사용하여 확인하고, 있다면 해당되는 시간을 count하여 tm변수에 더하여주면 된다. 이 때, 시간은 해당되는 인덱싱 + 3을 해주어야 한다.
- 예를 들어 숫자 위의 문제대로면 숫자 2를 누르는데 총 3초가 걸린다. 하지만 숫자 2는 alpha_list에서 'ABC'에 해당하며 'ABC'의 인덱싱은 0이기 때문에 총 3초의 차이가 나기 때문이다.
3) 출력
- 계산이 완료되면 총 시간을 합한 값 tm을 출력한다.
R. 리뷰
- 리스트의 인덱싱에 대한 개념이 잘 잡혀있어야 풀 수 있는 문제이다.
- 함수 in을 활용하여 문자가 포함되어 있는지 검사하는 작업을 if 조건문으로 취해주는 것도 주요 포인트이다.
'DEV > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1316번(파이썬) (0) | 2022.10.12 |
---|---|
백준 알고리즘 2941번(파이썬) (0) | 2022.10.11 |
백준 알고리즘 2908번(파이썬) (0) | 2022.10.09 |
백준 알고리즘 1152번(파이썬) (0) | 2022.10.08 |
백준 알고리즘 1157번(파이썬) (0) | 2022.10.07 |
댓글