문제 링크: https://www.acmicpc.net/problem/18238
18238번: ZOAC 2
2019년 12월, 두 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 작년 ZOAC의 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해
www.acmicpc.net
이 문제 푸는데 좀 오래 걸렸다.
아래 그림에서 말하는 큰 알파벳은 알파벳 순서에서 더 뒤에 있는 것을 말한다.
즉, 'A' -> 'Z'로 갈 수록 큰 알파벳이라고 생각하면 된다.

나는 현재 문자와 다음 문자의 아스키 코드를 비교해서,
min(큰 아스키 코드 - 작은 아스키 코드, 작은 아스키 코드 - 큰 아스키 코드 + 26) 둘 중에 최소값을 계속 누적하는 식으로 문제를 풀었다.
a = list(input())
res = 0
# 처음에 'A'부터 시작
res = min(ord(a[0])-ord('A'), ord('A')-ord(a[0])+26)
for i in range(len(a)-1):
if ord(a[i])>ord(a[i+1]):
big = ord(a[i])
small = ord(a[i+1])
else:
big = ord(a[i+1])
small = ord(a[i])
t = min(abs(small - big + 26), abs(big-small))
res += t
print(res)
어째 풀긴 풀었는데 뭔가 최적은 아닌 것 같아서, 다른 사람이 작성한 코드를 보니.. 그게 좀 더 직관적인 것 같다.
a = list(input())
start = 'A'
t = 0
for i in a:
x = ord(i) - ord(start) # 현재 - 이전 알파벳
y = ord(start) - ord(i) # 이전 - 현재 알파벳
if x < 0:
x += 26
elif y < 0:
y += 26
t += min(x, y)
start = i
print(t)'1일 1솔' 카테고리의 다른 글
| [백준] 28062번: 준석이의 사탕 사기 (Python, 파이썬) (0) | 2023.09.10 |
|---|---|
| [백준] 21313: 문어 (Python, 파이썬) (0) | 2023.09.08 |
| [백준] 22864번: 피로도 (Python, 파이썬) (0) | 2023.09.06 |
| [백준] 14487번: 욱제는 효도쟁이야!! (Python, 파이썬) (0) | 2023.09.06 |
| [백준] 2864번: 5와 6의 차이 (Python, 파이썬) (0) | 2023.09.06 |