주니어로서의 백 걸음, 개발자로서의 한 걸음

[백준 18238] ZOAC 2 파이썬 문제 풀이 본문

Python/백준 문제풀이

[백준 18238] ZOAC 2 파이썬 문제 풀이

코딩하는 친구 2023. 7. 26. 17:39

문제 풀이:  해당 문제는 하나의 문자를 입력받았을 때 유니코드 정수로 반환해 주는 함수인 ord() 함수를 사용해야 한다.

ex) ord('a')를 넣으면 정수 97을 반환한다.

반대로 정수를 입력 받았을 때 유니코드 문자로 반환해 주는 함수인 chr() 함수도 있다.

ex) chr(97) 을 넣으면 문자 'a'가 반환된다.

 

처음 화살표는 'A'를 가리키기 때문에 변수 first의 초기 값을 'A'로 설정한다.

문자를 하나씩 가져와서 왼쪽으로 돌려야 최소 값이 나오는지 오른쪽으로 돌려야 최소가 나오는지를 계산한다.

a = input()
first = 'A'
cnt = 0
for i in a:
    left = ord(first) - ord(i)
    right = ord(i) - ord(first)
    if left < 0:
        left += 26
    elif right < 0:
        right += 26
    cnt += min(left, right)
    first = i
print(cnt)

 

입력받은 문자열을 'A'의 아스키코드 값으로 빼준 경우는 왼쪽으로 돌려야 하는 경우

'A'의 아스키 코드아스키코드 값을 입력받은 문자열의 아스키코드 값으로 빼준 경우는 오른쪽으로 돌려야 하는 경우이다.

만약 left 값과 right 값이 0보다 작다면 26을 더한다

즉 A에서 Z로 가기 위해서 왼쪽으로 1번 돌리는 것과 오른쪽으로 25번 돌리는 것 중에서 최소인 값을 cnt에 더해주는 것이다.