๐ programmers ์กฐ์ด์คํฑ Level2
์ฒ์์ dict๋ฅผ ์ํ๋ฒณ ๋ณ๋ก ๋ง๋ค๊ณ A์์ ๋นผ์ฃผ์ด์ผ ํ๋๋ฐ python์๋ ord() ๋ด์ฅ ํจ์๊ฐ ์๋๊ฑธ ๊น๋จน๊ณ ์์๋ค.์ด ๋ฌธ์ ๋ A๊ฐ ์์๋,
1. ์์ผ๋ก ์ญ ๊ฐ๋ค
2. ๋ฐฉํฅ์ ์ผ์ชฝ(๋ค๋ก) ๊ฐ์ CCAAB -> B ๋ถ๋ถ์ ๋จผ์ ์ฒดํฌํ๊ณ ์จ๋ค
3. ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ค๊ฐ ์ผ์ชฝ์ผ๋ก(๋ค๋ก) ๊ฐ์ ๋ฐ๋ํธ์ผ๋ก ๊ฐ๋ค CCCAAAAABBBBBB ๊ฐ์ ๊ฒฝ์ฐ
์ฆ 3๊ฐ์ง ๊ฒฝ์ฐ๋ง ๋ ์ฌ๋ฆฌ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค.
๊ทผ๋ฐ ๋จธ๋ฆฌ์์ผ๋ก ๋ ์ฌ๋ฆฌ๋ฉด ์ด๋ ต๊ณ ๊ณต์ฑ ์ด๋ ๋ฉ๋ชจ์ฅ์ ์จ๊ฐ๋ฉด์ ํ๋ฉด ๋๋ฆ ์ฝ๋ค.
- ํ์ด
def solution(name): cnt = 0 move = len(name) - 1 for idx, val in enumerate(name): cnt += min(ord(val) - ord('A'), ord('Z') - ord(val) + 1) n_idx = idx + 1 while n_idx < len(name) and name[n_idx] == 'A': n_idx += 1 move = min(move, 2 * idx + len(name) - n_idx, idx + 2 * (len(name) - n_idx)) return cnt + move