반응형
https://programmers.co.kr/learn/courses/30/lessons/42860
조이스틱을 움직일 때 움직인 마지막 위치에서 최소거리를 구해야하는 줄 알고 생각하다가 방법이 생각나지 않아서 다른 사람 풀이를 보려고 검색했는데 완전히 잘못 이해하고 있었다...ㅋㅋㅋㅋ 다음 위치로 넘어가면 조이스틱이 A에서 시작하는 것이었다... 이 사실을 알고 다시 생각해보았더니 방법이 생각났다
이 문제는 상하로 움직이는 로직과 좌우로 움직이는 로직으로 나뉜다. 상하로 움직이는 로직은 name - A의 거리와 Z - name의 거리 중 최소 거리로 움직이면 된다. 좌우로 움직이는 로직은 A는 움직일 필요가 없으므로 왼쪽으로 움직일 때 A가 아닌 글자가 나오는 거리와 오른쪽으로 움직일 때 A가 아닌 글자가 나오는 거리 중 최소 거리로 움직이면 된다.
def solution(name):
alpha = [min(ord(i) - ord('A'), ord('Z') - ord(i) + 1) for i in name] #상하 최소 거리 구하여 저장
i, answer = 0, 0
# 조이스틱을 움직여 글자 완성하기
while True:
answer += alpha[i]
alpha[i] = 0 # 이동이 끝났으면 값을 0으로 만듬
# 모든 값이 0이 되면 글자가 완성되었으므로 답을 리턴해줌
if sum(alpha) == 0:
return answer
left, right = 1, 1 # 왼쪽과 오른쪽으로 움직일 거리
# 이동해야 할 글자가 나올 때까지 반복
while alpha[i - left] == 0:
left += 1
while alpha[i + right] == 0:
right += 1
# left, right 중 최소거리 구하여 다음 위치로 이동
if right > left:
answer += left
i -= left
else:
answer += right
i += right
먼저 answer에 현재 위치에서 이동해야 할 최소거리를 더해주고 이동이 끝났음을 나타낼 수 있도록 현재 위치 값을 0으로 바꿉니다. alpha의 모든 값이 0이 되면 글자가 완성된 것이므로 답을 리턴해주면 됩니다. 만들어야 할 글자가 A라면 alpha에 0으로 되어있을 것이고, 이동이 끝난 글자도 0으로 되어있을 것입니다. 이동해야 할 글자가 나올 때까지 위치를 이동해야하므로 왼쪽으로 이동할 때와 오른쪽으로 이동할 때의 거리를 구합니다. 구한 후 둘 중 최소거리를 구해서 다음 위치로 이동시킵니다. 이 로직이 반복되다가 모든 글자가 완성되면 답이 리턴되게 됩니다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 무지의 먹방 라이브 (0) | 2021.06.15 |
---|---|
[프로그래머스/Python] 큰 수 만들기 - Level2 (0) | 2021.06.14 |
[프로그래머스/Python] 체육복 - Level1 (0) | 2021.06.12 |
[프로그래머스/Python] 이중우선순위큐 - Level3 (0) | 2021.06.01 |
[프로그래머스/Python] 디스크 컨트롤러 - Level3 (0) | 2021.05.30 |