[2020 카카오인턴] 키패드누르기
2020. 7. 29. 00:10ㆍ카테고리 없음
https://programmers.co.kr/learn/courses/30/lessons/67256
키패드에 있는 각 번호에 대한 좌표를 딕셔너리 keypads로 저장하였다.
사용자가 누른 번호 number에 따라 분기
number 가 3 또는 6 또는 9 이면 항상 오른손이 누르기 때문에 'R'
2) number가 1 또는 4 또는 7 이면 항상 왼손이 누르기 때문에 'L'
3) 1) 또는 2)의 경우가 아닐 경우 → findHand 함수 호출
findHand 함수
- number : 사용자가 누른 번호
- rightHand: 오른손이 최근에 누른 번호
- leftHand: 왼손이 최근에 누른 번호
- hand: 사용자가 주로 사용하는 손
1-1) 키패드에서 number와 rightHand의 상대적 거리 rightDist 구하기
1-2) 키패드에서 number와 leftHand의 상대적 거리 leftDist 구하기
2-1) 상대적거리 rightDist와 leftDist가 동일할 경우 사용자가 주로 쓰는 hand 값 반환
2-2) rightDist가 leftDist 클 경우, lefthand 'L'값 반환
2-3) leftDist가 rightDist 클 경우, righfthand 'R'값 반환
keypads= {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)}
def findHand(number, rightHand, leftHand, hand):
rightDist = abs(keypads[number][0] - keypads[rightHand][0]) + abs(keypads[number][1] - keypads[rightHand][1])
leftDist = abs(keypads[number][0] - keypads[leftHand][0]) + abs(keypads[number][1] - keypads[leftHand][1])
if rightDist == leftDist:
if hand == 'right':
return 'R'
elif hand == 'left':
return 'L'
elif rightDist > leftDist:
return 'L'
elif rightDist < leftDist:
return 'R'
def solution(numbers, hand):
answer = ''
movedHand, rightHand, leftHand = '', '#', '*'
for number in numbers:
if number in [3, 6, 9]:
movedHand = 'R'
elif number in [1, 4, 7]:
movedHand = 'L'
else:
movedHand = findHand(number, rightHand, leftHand, hand)
if movedHand == 'R':
rightHand = number
elif movedHand == 'L':
leftHand = number
answer += movedHand
return answer