์๊ณ ๋ฆฌ์ฆ ๐ก/ํ๋ก๊ทธ๋๋จธ์ค
์กฐ์ด์คํฑ Greedy
by @ENFJ
2024. 9. 1.
name return
"JEROEN" 56
"JAN" 23
def solution(name):
# ์กฐ์ด์คํฑ ์กฐ์ ํ์
answer = 0
# ๊ธฐ๋ณธ ์ต์ ์ข์ฐ์ด๋ ํ์ : ๊ธธ์ด - 1
min_move = len(name) - 1
for i, char in enumerate(name): # enumerate() ํจ์: enumerate()๋ ๋ฐ๋ณตํ ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ๋์์ ์ ๊ณตํ๋ ํจ์์
๋๋ค. enumerate(๋ฐ๋ณต_๋์)์ (์ธ๋ฑ์ค, ๊ฐ) ํํ์ ํํ์ ๋ฐํํฉ๋๋ค.
#์์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ
forward_move = ord(char) - ord('A')
#๋ค๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ
backward_move = ord('Z') - ord(char)+1
# ํด๋น ์ํ๋ฒณ ๋ณ๊ฒฝ ์ต์๊ฐ ์ถ๊ฐ
answer += min( forward_move, backward_move )
# ํด๋น ์ํ๋ฒณ ๋ค์๋ถํฐ ์ฐ์๋ A ๋ฌธ์์ด ์ฐพ๊ธฐ
while next < len(name) and name[next] == 'A':
next += 1
# ๊ธฐ์กด, ์ฐ์๋ A์ ์ผ์ชฝ์์ ๋ฐฉ์, ์ฐ์๋ A์ ์ค๋ฅธ์ชฝ์์ ๋ฐฉ์ ๋น๊ต ๋ฐ ๊ฐฑ์
min_move = min([min_move, 2 *i + len(name) - next, i + 2 * (len(name) -next)])
# ์ํ๋ฒณ ๋ณ๊ฒฝ(์ํ์ด๋) ํ์์ ์ข์ฐ์ด๋ ํ์ ์ถ๊ฐ
answer += min_move
return answer