Programmers : ์กฐ์ด์Šคํ‹ฑ

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

๐Ÿ”’ Programmers : ์กฐ์ด์Šคํ‹ฑ


์–ด๋ ต์ง€ ์•Š๊ณ  ์žฌ๋ฐŒ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

ํ˜„์žฌ ์œ„์น˜์—์„œ ๋ฌธ์ž๋ฅผ ๋ฐ”๊ฟ”์•ผํ•˜๋Š” ๊ฐ€๊นŒ์šด ์œ„์น˜๋ฅผ ์ฐพ์•„๊ฐ€์•ผํ•œ๋‹ค.


๐Ÿ”‘ ์ฝ”๋“œ

def where(idx, arr, name):
    left, right = -1, 1
    l = len(name)
    while -left < len(name) and name[idx + left] == arr[idx + left]:
        left -= 1
    while right < len(name) and name[(idx + right)%l] == arr[(idx + right)%l]:
        right += 1
    
    return left if -left < right else right

def solution(name):
    arr = list("A"*len(name))
    move, idx, cnt = 0, 0, 0
    for i in range(1, len(name[1:])):
        if arr[i] == i:
            cnt += 1
    while cnt < len(name):
        move += min(ord(name[idx])-ord(arr[idx]), ord('Z')-ord(name[idx])+1)
        arr[idx] = name[idx]
        cnt += 1
        mcnt = where(idx, arr, name)
        idx = (idx + mcnt) % len(name)
        move += abs(mcnt) % len(name)

    return move

whereํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ์˜ค๋ฅธ์ชฝ๊ณผ ์™ผ์ชฝ ์ค‘ ๋ฌธ์ž๋ฅผ ๋ฐ”๊ฟ”์•ผํ•˜๋Š” ๊ฐ€๊นŒ์šด ์œ„์น˜์˜ ๋ฐฉํ–ฅ๊ณผ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— name์—์„œ ์•ˆ ๋ฐ”๊ฟ”๋„ ๋˜๋Š” ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ cnt์— ๋”ํ•ด์ค€๋‹ค.

ํ˜„์žฌ ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ณ  move๋ฅผ ์˜ฌ๋ฆฐ ๋’ค cnt๋ฅผ 1 ๋Š˜๋ฆฐ๋‹ค.

์˜ฎ๊ฒจ์•ผํ•  ๋ฐฉํ–ฅ๊ณผ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์•„ ์˜ฎ๊ฒจ์ฃผ๊ณ  ์˜ฎ๊ธด ํšŸ์ˆ˜๋งŒํผ move๋ฅผ ์˜ฌ๋ ค์ค€๋‹ค.

๋ฌธ์ž๋ฅผ ๋ฐ”๊พผ ์ˆ˜(cnt)๊ฐ€ ๊ธ€์ž์ˆ˜(len(name))์™€ ๊ฐ™์•„์ง€๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ