반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(numbers, hand):
result = ''
coordinate = {
1 : (0,3),
2 : (1,3),
3 : (2,3),
4 : (0,2),
5 : (1,2),
6 : (2,2),
7 : (0,1),
8 : (1,1),
9 : (2,1),
0 : (1,0),
'*' : (0,0),
'#' : (2,0)
}
def distance(number, hand):
x1, y1 = coordinate[number]
x2, y2 = hand
d = abs(x2-x1) + abs(y2-y1)
return d
left_hand = coordinate['*']
right_hand = coordinate['#']
for n in numbers:
if n in (1,4,7):
result += 'L'
left_hand = coordinate[n]
elif n in (3,6,9):
result += 'R'
right_hand = coordinate[n]
elif n in (2,5,8,0):
if distance(n, left_hand) < distance(n, right_hand):
result += 'L'
left_hand = coordinate[n]
elif distance(n, left_hand) > distance(n, right_hand):
result += 'R'
right_hand = coordinate[n]
else:
if hand == 'left':
result += 'L'
left_hand = coordinate[n]
else:
result += 'R'
right_hand = coordinate[n]
return result
먼저 저는 숫자 키패드를 coordinate
딕셔너리 자료구조로 각 좌표값을 저장하였습니다.
저장한 좌표값은 다음과 같습니다.
- 1 : (0,3) ~ '#' : (2, 0)
가운데 열의 4개의 숫자 2
, 5
, 8
, 0
을 입력했을 때 현재 키패드의 위치에서 더 가까운 엄지손가락을 판단하기 위하여 숫자와 왼쪽, 오른쪽 엄지손가락의 거리를 계산하는 함수 distance
를 작성하였습니다.
distance
함수는 맨하튼거리를 계산하는 함수이며 거리를 계산하는 방법이 여러가지가 존재하지만 대각선이 아닌 상하좌우로 이동해야하기 때문에 맨하튼거리가 더 적합해보입니다.
- 유클리드로 계산했을때 테스트케이스에서 통과하지 못했습니다...
그리고 초기에 시작위치를 각각 다음과 같이 지정합니다.
left_hand
:(0,0)
right_hand
:(2,0)
numbers
를 반복하며 숫자를 확인하면서
1
,4
,7
의 경우 result
에 L
을 더해주고 left_hand
의 위치를 현재 숫자에 해당하는 좌표로 지정합니다.
3
,6
,9
의 경우 result
에 R
을 더해주고 right_hand
의 위치를 현재 숫자에 해당하는 좌표로 지정합니다.
2
,5
,8
,0
의 경우에는 위에서 작성한 거리를 계산하는 함수 distance
를 이용하여 계산하고 알맞은 값을 result
에 더해줍니다.
- 만약 거리 값이 동일하다면 입력으로 들어오는
hand
에 해당하는 값을result
에 더하고 해당hand
은 키패드로 이동하게 됩니다.
모든 숫자를 반복했다면 결과 result
를 반환합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 촌수계산 파이썬(python) (0) | 2023.02.02 |
---|---|
[코딩테스트] 프로그래머스 [1차] 다트 게임 파이썬(Python) (0) | 2023.02.01 |
[코딩테스트] 프로그래머스 무인도 여행 파이썬(Python) (0) | 2023.01.30 |
[코딩테스트] 프로그래머스 오픈채팅방 파이썬(Python) (0) | 2023.01.27 |
[코딩테스트] 프로그래머스 숫자 카드 나누기 파이썬(Python) (0) | 2023.01.26 |