https://programmers.co.kr/learn/courses/30/lessons/42860
이 문제에서 구현해야 하는 로직은 두 가지다
1. 현재 커서의 알파벳에 따라 이동해야 하는 최소 커서 횟수 계산
2. 현 위치에서 커서를 왼쪽 오른쪽 중 어디로 이동해야 최소 커서 이동인지 계산
알파벳의 총개수는 25개이므로,
위의 12개 까지는 조이스틱을 아래로
아래 12개 까지는 조이스틱을 위로(거꾸로) 이동하면 된다.
'A'의 아스키 코드 값은 65 이므로 + 12 인 77까지는 아래로
그보다 클 때는 위로 조이스틱을 이동하도록 코드를 작성했다.
중간값인 78은 어디로 가도 똑같기 때문에 그냥 아래로 가도록 했다.
다음으로 현 위치에서 커서를 왼쪽 오른쪽 중 어디로 이동해야 최소 커서 이동인지 계산하는 문제는
그냥 현 위치에서 가장 가까운 곳으로 방문하면 결국 그게 최소라는 것을 추론해야 한다.
아무튼 그래서 나는 오른쪽 왼쪽으로 한 칸씩 이동하면서
이동한 커서 위치가 변경해야 하는 코드라면 바로 커서위치를 변경해주고 반복문을 빠져나오게 된다.
def solution(name):
# visit 리스트를 선언, 알파벳이 A가 아니면 True, A이면 False로 수정하지 않아도 됨.
visit =[True if x !='A' else False for x in name]
answer = 0 # 커서 이동 횟수
index = 0 # 커서 위치
# 수정해야 하는 알파벳이 있을 때
while True in visit:
# 만약 현재 커서 위치의 알파벳이 수정해야 한다면
if visit[index] == True:
# 방문 처리
visit[index] = False
# 아스키 코드 값 활용
joy_count = ord(name[index])
answer += joy_count - 65 if joy_count <=78 else 91 -joy_count
else:
right_move = index
left_move = index
while True in visit:
answer += 1
right_move = right_move + 1 if right_move != len(visit)-1 else 0
left_move = left_move -1 if left_move != -(len(visit)) else -1
if visit[right_move] == True:
index = right_move
break
elif visit[left_move] == True:
index = left_move
break
return answer
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 구명보트 (Python) (0) | 2021.10.27 |
---|---|
[프로그래머스] 큰 수 만들기(Python) (0) | 2021.10.27 |
[프로그래머스] 괄호 변환(Python) (0) | 2021.10.23 |
[프로그래머스] 짝지어 제거하기(Python) (0) | 2021.10.23 |
[프로그래머스] 오픈채팅방(Python) (0) | 2021.10.22 |
댓글