programmers.co.kr/learn/courses/30/lessons/67256
코딩테스트 연습 - 키패드 누르기
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
programmers.co.kr
def get_distance(start, arrive, dic):
distance = 0
for x, y in zip(dic[start], dic[arrive]):
distance += abs(x-y)
return distance
def solution(numbers, hand):
dic = {
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]
}
left, right = '*', '#'
result = ''
for number in numbers:
if str(number) in '147':
left = number
result += 'L'
elif str(number) in '369':
right = number
result += 'R'
else:
left_distance = get_distance(left, number, dic)
right_distance = get_distance(right, number, dic)
if left_distance < right_distance:
left = number
result += 'L'
elif left_distance > right_distance:
right = number
result += 'R'
else:
if hand == 'left':
left = number
result += 'L'
else:
right = number
result += 'R'
return result
키패드 사이의 거리를 구하는 방법을 생각해내지 못해, 결국 도움을 받아 풀었다.
거리를 구하는 방법은 생각보다 간단하다. 출발점 좌표를 [x1, y1] 도착점 좌표를 [x2, y2] 라고 했을 때, abs(x1-x2) + abs(y1 - y2) 가 거리가 된다. 위 풀이에서는 zip을 활용했다.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스-Level 1] 소수 만들기_파이썬 (0) | 2021.04.08 |
---|---|
[프로그래머스-Level 1] 최대공약수와 최소공배수 ❌⭕ (0) | 2021.04.08 |
[프로그래머스-Level 1] 이상한 문자 만들기_파이썬 (0) | 2021.04.06 |
[프로그래머스-Level 1] 시저 암호_파이썬 (0) | 2021.04.05 |
[프로그래머스-Level 1] 수박수박수박수박수박수?_파이썬 (0) | 2021.04.05 |