[프로그래머스/파이썬] 키패드 누르기(67256) 풀이
업데이트:
문제 정보
- 문제 출처: 프로그래머스 코딩테스트 연습
- 문제 링크: 키패드 누르기 (67256)
- 문제풀이 코드 GitHub 링크
- 풀이 언어: Python 3
풀이
문제
전화 키패드에서 숫자를 순서대로 누를 때, 왼손/오른손 중 어떤 손을 써야 하는지 규칙에 따라 문자열로 반환하는 문제입니다.
- 왼쪽 열(1,4,7)은 왼손
- 오른쪽 열(3,6,9)은 오른손
- 가운데 열(2,5,8,0)은 현재 위치 기준 거리(맨해튼 거리) 비교
- 거리가 같으면 주 손잡이(hand) 사용
코드
def solution(numbers, hand):
answer = ''
places = {i+1:(i//3, i%3) for i in range(9)}
places['*'], places[0], places['#'] = (3, 0), (3, 1), (3, 2)
cl, cr = '*', '#'
for number in numbers:
if number in [1, 4, 7]:
answer += 'L'
cl = number
elif number in [3, 6, 9]:
answer += 'R'
cr = number
else:
diffL = abs(places[cl][0]-places[number][0]) +\
abs(places[cl][1]-places[number][1])
diffR = abs(places[cr][0]-places[number][0]) +\
abs(places[cr][1]-places[number][1])
if diffL < diffR or (diffL == diffR and hand=='left'):
answer += 'L'
cl = number
else:
answer += 'R'
cr = number
return answer
설명
키패드 숫자를 좌표로 매핑해 두면, 가운데 열 버튼 선택 시 거리 계산을 간단하게 처리할 수 있습니다.
places딕셔너리에 숫자별(행,열)저장cl,cr로 현재 왼손/오른손 위치 추적- 가운데 열 숫자는
|r1-r2| + |c1-c2|로 거리 비교
거리 비교 규칙만 정확히 구현하면 바로 통과 가능한 구현 문제입니다.
댓글남기기