Programmers : ์กฐ์ด์คํฑ
๐ 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))์ ๊ฐ์์ง๋ฉด ์ข ๋ฃํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ