기록
[Python] 키패드 누르기 본문
반응형
programmers.co.kr/learn/courses/30/lessons/67256
문제에서 요구하는 것을 구현하는 문제입니다.
def solution(numbers, hand):
answer = ''
lHand = '*'
rHand = '#'
key_pos = {1:(0,0), 2:(0,1), 3:(0,2),
4:(1,0), 5:(1,1), 6:(1,2),
7:(2,0), 8:(2,1), 9:(2,2),
'*':(3,0), 0:(3,1), '#':(3,2)}
for n in numbers:
if n in [1,4,7]:
answer += 'L'
lHand = n
elif n in [3,6,9]:
answer += 'R'
rHand = n
else:
curPos = key_pos[n]
lPos = key_pos[lHand]
rPos = key_pos[rHand]
lDist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
rDist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
if lDist < rDist:
answer += 'L'
lHand = n
elif lDist > rDist:
answer += 'R'
rHand = n
else:
if hand == 'left':
answer += 'L'
lHand = n
else:
answer += 'R'
rHand = n
return answer
왼쪽, 오른쪽 열의 숫자를 입력할 때는 그대로 해당 방향을 answer에 추가해주고 현재 위치 손이 누른 키패드 수만 바꿔주면 돼요.
문제는 눌러야 할 키패드가 [2, 5, 8, 0]인 경우입니다.
키패드에 해당하는 좌표를 쉽게 이용하기 위해 딕셔너리로 매칭했어요.
현재 누를 키에 해당하는 좌표, 왼쪽 손의 좌표, 오른쪽 손의 좌표를 각각 꺼냅니다.
그 후 현재 누를 키로부터 왼쪽 손 좌표, 오른쪽 손 좌표까지의 '거리'를 절댓값을 취해 구합니다.
반응형
'[Study] > 코딩테스트 연습' 카테고리의 다른 글
[Kotlin] 로또의 최고 순위와 최저 순위 (0) | 2022.07.15 |
---|---|
[Python] 124 나라의 숫자 (0) | 2021.04.21 |
[Python] 실패율 (0) | 2020.11.09 |
[Python] 크레인 인형뽑기 게임 (0) | 2020.11.08 |
[Python] 3진법 뒤집기 (0) | 2020.11.07 |