열렬히.뛰기

5622번: 다이얼

알고리즘: 실전 > 백준 단계별로 풀기: 1번 ~ 9번 > 5622번: 다이얼

문제

전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다.

숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.

숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

아이디어

  • 문자를 받고 리스트로 전환
  • 배열 arr 생성; 숫자 담기 위한 용도
  • for문 돌리기
    • 각 단어 → 숫자로 변환 (아스키코드 이용) 이때 무조건 대문자 A가 0이 되도록 변환.
    • 숫자 규칙 보기
      • 2~6까지 숫자 하나 당 글자가 3개
      • 7에는 글자 4개
      • 8에는 글자 3개
      • 9에는 글자 4개
    • 따라서 n < 18이면 n // 3 + 2 을 배열 arr에 추가
    • n == 18 이면 7을 배열 arr에 추가
    • 19 <= n <= 21 이면 8을 배열에 추가
    • 22 <= n <= 25 에는 9를 배열에 추가
  • 배열 arr에 대한 for문 돌리기
    • 각 수 + 1 해준 값이 시간.
    • 계속 더하면 총 시간 도출.

코드

python
word = list(input())
arr, sum = [], 0

for w in word:
    n = ord(w) - 65
    if n < 18:
        arr.append(n // 3 + 2)
    else:
        if n == 18: arr.append(7)
        if 19 <= n <= 21: arr.append(8)
        if 22 <= n <= 25: arr.append(9)

for a in arr:
    sum += (a + 1)
print(sum)