[Programmers] ์กฐ์ด์คํฑ
Updated:
์กฐ์ด์คํฑ
์กฐ์ด์คํฑ ์ ํด๋ฆญํ๋ฉด ๋ฐ๋ก ์ด๋ํ๋ค.
์ด ๋ฌธ์ ๋ ์ฌ๋ฌ๊ฐ์ง ํ ์คํธ์ผ์ด์ค๋ฅผ ํด๋๊ณ ์์ผ๋ก ํ๋ค๋ณด๋ฉด ๊ท์น์ด ๋ณด์ธ๋ค.
- โAโ ๊ฐ ์๋ ๊ฒฝ์ฐ ์กฐ์ด์คํฑ์ ์๋ก ์ฌ๋ฆฌ๊ฑฐ๋ ์๋๋ก ๋ด๋ ค ์ํ๋ ์ํ๋ฒณ์ ๋ง๋ค ์กฐ์ ํ์๋ฅผ ๊ตฌํ ๋ค โAโ ๋ก ๋ณ๊ฒฝ.
- โAโ ๊ฐ ์๋ ๋ ๊น์ง ์ค๋ฅธ์ชฝ ์ด๋, ์ผ์ชฝ ์ด๋ ํ์๋ฅผ ๊ตฌํด ๋น๊ต ํ ์์ ๊ฐ์ ์์น๋ก ์ด๋ ํด 1๋ฒ์ ๋ฐ๋ณตํ๋ค.
- ์ ๋ ฅ ๋ฐ์ name ์ด ๋ชจ๋ โAโ ๋ก ๋ฐ๋๋ฉด ์ข ๋ฃ.
from string import ascii_uppercase
def make_alpha(val):
alpha = list(ascii_uppercase)
value = alpha.index(val)
if value <= 13:
pass
else:
value = 26 - value
return value
def right_move(name, idx):
cur_idx = idx
move_cnt = 0
while name[cur_idx] == 'A':
cur_idx = (cur_idx + 1) % len(name)
move_cnt += 1
return move_cnt
def left_move(name, idx):
cur_idx = idx
move_cnt = 0
while name[cur_idx] == 'A':
cur_idx = (cur_idx - 1)
if cur_idx < 0:
cur_idx = len(name) - 1
move_cnt += 1
return move_cnt
def solution(name):
answer = 0
idx = 0
finish_check = 'A' * len(name)
while True:
if name[idx] != 'A':
answer += make_alpha(name[idx])
name = name.replace(name[idx], 'A', 1)
if name == finish_check:
break
right_move_cnt = right_move(name, idx)
left_move_cnt = left_move(name, idx)
if right_move_cnt <= left_move_cnt:
answer += right_move_cnt
idx += right_move_cnt
else:
answer += left_move_cnt
idx -= left_move_cnt
if idx < 0:
idx = len(name) - left_move_cnt
return answer
์ํ๋ฒณ์ ๋ง๋ค ์กฐ์ ํ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์ฃผ ๊ฐ๋จํ๋ค.
A ~ M ๊น์ง๋ ์๋ก, O ~ Z ๊น์ง๋ ์๋๋ก ๋ด๋ฆฌ๋ฉด ๋๋ค.
N ์ ์ํ๋ฒณ์์ ์ค๊ฐ์ ์์นํ๊ธฐ ๋๋ฌธ์ ์๋ก ์ฌ๋ ค ๋ง๋ค๋ ์๋๋ก ์ฌ๋ ค ๋ง๋ค๋ ์๊ด์๋ค.
์ํ๋ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊พผ ๋ค ์ผ์ชฝ์ผ๋ก ๊ฐ์ง ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์ง๋ฅผ ์ ํ๋ฉด ๋๋๋ฐ
์ด๊ฒ๋ ๋จ์ํ โAโ ๊ฐ ์๋ ๋ ๊น์ง ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ ํ ์ด๋ ํ์๋ฅผ ๋ฐํํ๋ค.
์ฌ๊ธฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ index ๊ฐ name ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด ๋๋จธ์ง๋ก ๊ณ์ฐ์ ํ๋ค.
์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ -1 ์ด ๋๋ฉด ์ต๋ index ๋ก ๋ฐ๊พธ์ด ์คฌ๋ค.
๋ง์ง๋ง์ผ๋ก ์ด๋ ํ์๋ฅผ ํตํด index ๋ฅผ ์ฎ๊ธด ํ ๋๊ฐ์ด ๋ฐ๋ณตํ๋ฉด ๋๋ค !
Leave a comment