본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 5622번(파이썬)

by 올커 2022. 10. 10.

 

백준 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 조건문으로 취해주는 것도 주요 포인트이다.

반응형

댓글