니노니나니

[백준/18238번] ZOAC 2 - B2/Python 본문

알고리즘/백준

[백준/18238번] ZOAC 2 - B2/Python

SangJunni 2024. 7. 31. 14:53

https://www.acmicpc.net/problem/18238

문제

2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다.

작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해냈다!

규칙은 이러하다.

  • 그림과 같은 원판에 문자들이 순서대로 적혀있다. 처음 순간에 화살표는 'A'를 가리키고 있다.
  • 원판은 왼쪽 또는 오른쪽으로 돌릴 수 있다. 원판을 한 칸 돌리는 데에는 1의 시간이 소요된다.
  • 화살표가 가리키고 있는 문자를 출력할 수 있다. 문자를 출력하는 데에 걸리는 시간은 없다.

시간이 너무 오래 걸리면 지루해할 ZOAC의 참가자들을 위해 성우는 해당 문자열을 앞에서부터 차례대로 최대한 빠르게 출력하려고 한다.

바쁜 성우를 위하여 해당 문자열을 출력하는 데 걸리는 시간의 최솟값을 구해보자.

입력

첫 번째 줄에 알파벳 대문자로 구성된 문자열이 주어진다. 문자열의 길이는 최대 100자이다. 빈 문자열은 주어지지 않는다.

풀이

word = input()
dial = [chr(x) for x in range(65, 91)]
prev = 'A'
move = 0
for w in word:
    gap = abs(ord(prev) - ord(w))
    move += min(gap,26-gap)
    prev = w
print(move)

해결방법

'A'에 시작한다는 것을 인지하고 옛날에 사용하던 다이얼 전화를 생각해서 이동 횟수를 최소화하도록 구현하면 되는 문제.