백준(Python) 풀이/그리디 알고리즘

백준(Python) 18238번 ZOAC 2 풀이

개발윗미 2021. 12. 8. 10:39

Python으로 구현한 18238번 ZOAC 2 문제 풀이입니다.

 

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

 

18238번: ZOAC 2

2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해

www.acmicpc.net


data = list(input())

start = 'A'
result = 0

for i in data :
  left_value = ord(start) - ord(i)
  right_value = ord(i) - ord(start)

  if left_value < 0 :
    left_value += 26
  elif right_value < 0 :
    right_value += 26

  result += min(left_value, right_value)
  start = i

print(result)

 

1. 알파벳 대문자로 구성된 문자열을 입력받아 리스트 형태로 구성하고 data에 저장한다.

 

2. 처음 순간의 화살표는 'A'를 가리키므로 start에 문자 'A'를 할당한다.

 

3. data 리스트에 존재하는 문자들을 하나씩 확인하여 start의 아스키코드 값에서

 

   현재 확인하고 있는 문자의 아스키코드 값을 빼 left_value에 할당한다.

 

4. 현재 확인하고 있는 문자의 아스키코드 값에서 start의 아스키코드 값을 빼 right_value에 할당한다.

 

5. left_value의 값이 음수일 경우 26을 더하고, right_value의 값이 음수일 경우 26을 더한다.

 

6. 두 수(left_value, right_value)의 값을 비교하여 더 작은 값을 result에 누적한 후 start를 현재 확인한 값으로 갱신한다.