[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Lv2] ์กฐ์ด์Šคํ‹ฑ / Python

๐Ÿ“š Problem Solving/Programmers

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์กฐ์ด์Šคํ‹ฑ

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA ์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. โ–ฒ - ๋‹ค

programmers.co.kr

import sys

input = sys.stdin.readline

name = input().rstrip()


def solution(name):
    change = [min(ord(i) - ord("A"), ord("Z") - ord(i) + 1) for i in name]
    answer, idx = 0, 0
    while True:
        answer += change[idx]
        change[idx] = 0
        if sum(change) == 0:
            return answer

        left, right = 1, 1
        while change[idx - left] == 0:
            left += 1
        while change[idx + right] == 0:
            right += 1
        answer += left if left < right else right
        idx += -left if left < right else right
    return answer


print(solution(name))

 

ํ•ด์„ค

change์— ์ƒ ์ด๋™๊ณผ ํ•˜ ์ด๋™ ์ค‘ ์ตœ์†Œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. ์ด ๋•Œ ord๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹ค์งˆ์ ์ธ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์ƒํ•˜ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ answer์— ์ถ•์ ์‹œํ‚จ๋‹ค.

์ขŒ์šฐ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ณ , ๋” ์งง์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ๋งŒํผ answer์— ์ถ•์ ์‹œํ‚จ๋‹ค.

 

์ขŒ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์œผ๋ฉด answer์— ์ขŒ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋งŒํผ ์ถ•์ .

์šฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์œผ๋ฉด answer์— ์šฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๋งŒํผ ์ถ•์ .

 

์ขŒ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์œผ๋ฉด idx๋Š” ํ˜„์žฌ idx์— -left๋ฅผ ํ•ด์ค€๋‹ค.

์šฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์œผ๋ฉด idx๋Š” ํ˜„์žฌ idx์— +right๋ฅผ ํ•ด์ค€๋‹ค.