두 키패드 사이의 거리를 구하는 것이 핵심인 문제였다.
(키패드 숫자 - 1) / 3 의 결과인 (몫, 나머지)는 키패드를 2차원 배열로 보았을 때 숫자의 위치 (y, x)와 같다.
두 점 (y1, x1), (y2, x2) 사이를 대각선으로 가로지르지 않는 거리는 |y1-y2| + |x1-x2| 이다.
이제 위의 두 사실을 이용하여 두 키패드 사이의 거리를 구할 수 있다.
LEFT_NUMBERS = [1, 4, 7]
RIGHT_NUMBERS = [3, 6, 9]
LEFT_HAND = 0
RIGHT_HAND = 1
LEFT_HANDED = 'left'
RIGHT_HANDED = 'right'
STAR = 10
SHARP = 12
ZERO = 0
def solution(numbers, handed):
left, right = STAR, SHARP
result = ''
for number in numbers:
if number == 0:
number = ZERO
if number in LEFT_NUMBERS:
hand = LEFT_HAND
elif number in RIGHT_NUMBERS:
hand = RIGHT_HAND
else:
hand = find_closest_hand_to_mid_number(number, left, right, handed)
if hand == LEFT_HAND:
left = number
result += 'L'
else:
right = number
result += 'R'
return result
def find_closest_hand_to_mid_number(mid, left, right, handed):
if get_distance(mid, left) < get_distance(mid, right):
return LEFT_HAND
elif get_distance(mid, left) > get_distance(mid, right):
return RIGHT_HAND
else:
if handed == LEFT_HANDED:
return LEFT_HAND
else:
return RIGHT_HAND
def get_distance(spot1, spot2):
spot1_y, spot1_x = divmod(spot1 - 1, 3)
spot2_y, spot2_x = divmod(spot2 - 1, 3)
return abs(spot1_y - spot2_y) + abs(spot1_x - spot2_x)
'문제 풀이' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 / 2020 카카오 인턴십 / python (0) | 2020.07.02 |
---|---|
[프로그래머스] 수식 최대화 / 2020 카카오 인턴십 / python (0) | 2020.07.02 |
[프로그래머스] 블록 게임 / 2019 카카오 블라인드 채용 / python (0) | 2020.05.07 |
[프로그래머스] 무지의 먹방 라이브 / 2019 KAKAO BLIND RECRUITMENT / python (0) | 2020.05.07 |
[프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT / python (0) | 2020.05.07 |