[Python]백준_18238 : ZOAC 2

Alal11·2022년 11월 27일
0
post-thumbnail

출처

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


문제

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

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

규칙은 이러하다.

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

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

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


입력

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


출력

입력으로 주어진 문자열을 출력하는 데에 걸리는 시간의 최솟값을 출력한다.


예제 입출력


알고리즘 분류

  • 구현
  • 문자열
  • 그리디 알고리즘

➡️문제 분석

왼쪽으로 도는 경우와 오른쪽으로 도는 경우의 시간을 각각 구해서 둘 중에 더 적은 시간을 적용한다.


➡️코드(⭕)

word = input()
start = 'A'
sec = 0

for i in word:                      # i에 word의 한 글자씩 넣어줌
    left = ord(start)-ord(i)        # 현재 위치에서 다음 위치까지 빼줌
    right = ord(i)-ord(start)       # 다음 위치에서 현재 위치까지 빼줌
    
    # 빼준 거리가 음수일 때 각각 26(초)을 더해줌
    if (left < 0):
        left += 26
    elif (right < 0):
        right += 26

    sec += min(left, right)         # 둘 중에 더 짧은 시간을 변수 sec에 더해줌
    start = i                       # start는 다시 i로 바뀜

print(sec)                          # 최단 시간 출력

➡️end

요즘 정신이 없어서 자세한 설명은 주석으로 대체...ㅠ

0개의 댓글