[Level 2] μ‘°μ΄μ€ν±
μ½λ©ν μ€νΈ μ°μ΅ - μ‘°μ΄μ€ν±
μ‘°μ΄μ€ν±μΌλ‘ μνλ²³ μ΄λ¦μ μμ±νμΈμ. 맨 μ²μμ Aλ‘λ§ μ΄λ£¨μ΄μ Έ μμ΅λλ€. ex) μμ±ν΄μΌ νλ μ΄λ¦μ΄ μΈ κΈμλ©΄ AAA, λ€ κΈμλ©΄ AAAA μ‘°μ΄μ€ν±μ κ° λ°©ν₯μΌλ‘ μμ§μ΄λ©΄ μλμ κ°μ΅λλ€. β² - λ€
programmers.co.kr
def cnt_up_down(chr):
cnt_from_a = abs(ord('A')-ord(chr))
cnt_from_z = abs(ord('Z')-ord(chr)+1)
return(min(cnt_from_a, cnt_from_z))
def solution(name):
cnt = 0
for i in name:
cnt += cnt_up_down(i)
lst_name = list(name)
len_name = len(lst_name)
if lst_name.count('A') == len_name:
return 0
cur = 0
lst_name[cur] = 'A'
while lst_name.count('A') != len_name:
cnt_left = 0
cnt_right = 0
pos_right, pos_left = cur, cur
for i in range(1, len_name):
cnt_right += 1
pos_right += 1
if pos_right > len_name-1:
pos_right -= len_name
if lst_name[pos_right] != 'A':
break
for j in range(1, len_name):
cnt_left += 1
pos_left -= 1
if pos_left < 0:
pos_left += len_name
if lst_name[pos_left] != 'A':
break
if cnt_right <= cnt_left:
lst_name[pos_right] = 'A'
cnt += cnt_right
cur = pos_right
else:
lst_name[pos_left] = 'A'
cnt += cnt_left
cur = pos_left
return cnt
β· μ΄ λ¬Έμ λ ν¬κ² μ‘°μ΄μ€ν±μ μ/μλλ‘ μμ§μ΄λ κ²½μ°μ μ’/μ°λ‘ μμ§μ΄λ κ²½μ°λ‘ λλμ΄ νμ΄μΌ νλ€. μ/μλλ‘ μμ§μ΄λ νμλ μ΄λ ν κ²½μ°μλ κ°λ€. λ°λΌμ μ’/μ°μ μ΄λμ μ€μ¬μ μ΅μμ μ΄λνμλ‘ λ§λλ κ²μ΄ ν΅μ¬μ΄λ€.
β· cnt_up_down ν¨μλ λ¬Έμμ λν μ/μλλ‘ μμ§μ¬μΌ νλ νμλ₯Ό ꡬνλ ν¨μμ΄λ€.
β· μ μ½λμ λ Όλ¦¬λ₯Ό μμ½νλ©΄ λ€μκ³Ό κ°λ€.
1. cnt_up_down ν¨μλ₯Ό μ΄μ©νμ¬ μ/μλλ‘ μμ§μ΄λ νμλ₯Ό ꡬνλ€.
2. 첫 λ²μ§Έ μμΉμ λ¬Έμλ₯Ό Aλ‘ λ³κ²½νλ€.
3. 첫 λ²μ§Έ μμΉλ₯Ό νμ¬ μμΉλ‘ μ ν λ€, μΌμͺ½μΌλ‘ μ΄λνλ κ²½μ°μ μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ κ²½μ°μ μ΄λνμλ₯Ό λΉκ΅νλ€. μ΄λ λ μ€ μμ μ΄λνμλ₯Ό μ 체 μ΄λνμμ μΆκ°νκ³ , νμ¬ μμΉλ₯Ό ν΄λΉ μ΄λμ λ°μνμ¬ λ³κ²½νλ€. μ΄λ λ³κ²½λ νμ¬μμΉμ λ¬Έμλ₯Ό Aλ‘ λ³κ²½νλ€.
4. name λ³μμ λͺ¨λ λ¬Έμκ° Aκ° λ λκΉμ§ 3λ² μμ μ λ°λ³΅νλ€.