반응형
https://www.acmicpc.net/problem/18238
from string import ascii_uppercase
uppers = list(ascii_uppercase)
s = input()
ans = 0
start = 'A'
for i in s:
start_idx = uppers.index(start)
next_idx = uppers.index(i)
if next_idx > start_idx:
ans += min((next_idx - start_idx), (start_idx + 26 - next_idx))
else:
ans += min((start_idx - next_idx), (next_idx + 26 - start_idx))
start = i
print(ans)
좀 더 최적화할만한 방법이 있을 것으로 생각하는 코드입니다. 이 문제의 경우 그렇게 입력이 길지 않고 시간 제한도 넉넉하기 때문에 단순 반복문에 두가지 방법의 최솟값을 구하는 방식으로 하면 충분히 풀릴 것이라 생각하고 그런 방향으로 코드를 작성했습니다.
저는 리스트 인덱스를 사용해서 문제를 계산하면 편할 것 같다고 생각이 들어서 알파벳 대문자를 원소로 가지는 리스트를 만들어줬습니다. 그리고 input을 순서대로 탐색하면서 다음으로 이동해야할 인덱스와 현재 인덱스의 차를 ans 라는 변수에 차례차례 더해주는 방식으로 코드를 작성했습니다. 또한 start_idx와 next_idx의 대소관계에 따라 차이를 계산하는 방식이 달라지기 때문에 조건문을 사용해서 분할해줬습니다(쓰다가 문득 든 생각인데 절댓값을 사용해서 계산하도록 하면 조건문이 없어도 될 것 같습니다).
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]18096 풀이 (0) | 2023.01.25 |
---|---|
[BOJ][Python]2810 풀이 (0) | 2023.01.23 |
[BOJ][Python]22864 풀이 (0) | 2022.12.31 |
[BOJ][Python]14487 풀이 (0) | 2022.12.30 |