본문 바로가기
PS/프로그래머스

[그리디] 프로그래머스 조이스틱 python

by 지기_ 2021. 6. 27.
반응형

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42860

 

2. 풀이

1) 'A'부터 올라가는 방향으로도 움직일 수 있고 'Z'에서 낮아지는 방향으로 움직일 수 있다.

2) 그 때 그때의 idx에 따라 왼쪽으로 가는 게 나을 수도 있고 오른쪽으로 가는 게 나을 수도 있다.

예: AZABAAAAAAAAAAAAAAAAAAXA  오른쪽으로 가서 Z B를 바꾸고 다시 왼쪽으로 와서 X를 고쳐야함.

 

파이썬 아스키코드: ord

print(chr(65))
print(ord('A'))
print(ord('d'))
    
A  #65를 chr로 만듦
65  #'A'를 숫자로 만듦 65~90
100  #'d'를 숫자로 만듦 97~122

삼항연산자:

answer += le if le<ri else ri
idx += -1*le if le < ri else ri

연산결과 list에 담기:

change = [min(ord(c)-ord('A'), ord('Z')-ord(c)+1) for c in name]

list의 모든 원소 합하기:

if sum(change)==0:

가장 가까운 곳으로 옮겨가기:

le, ri = 1,1
while change[idx-le]==0:
   le+=1
while change[idx+ri]==0:
   ri+=1
idx += -1*le if le < ri else ri

 

 

3. 구현

def solution(name):
    answer = 0
    change = [min(ord(c)-ord('A'), ord('Z')-ord(c)+1) for c in name]
    
    idx=0
    while True:
        # print(change, idx)
        answer+=change[idx]
        change[idx]=0
        if sum(change)==0:
            return answer
        le, ri = 1,1
        while change[idx-le]==0:
            le+=1
        while change[idx+ri]==0:
            ri+=1
        answer += le if le<ri else ri
        idx += -1*le if le < ri else ri
    return answer

 

참고

https://whwl.tistory.com/93

반응형

댓글