문제
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다.
숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 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)