2024년 1월 19일 알고리즘 문제풀이
문제
난이도
Lv.1
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def solution(numbers, hand):
arr = [0 for _ in range(len(numbers))]
position = [[3,1],[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2],[3,0],False,[3,2]]
finger = [10,12]
left = [1,4,7]
right = [3,6,9]
for i in range(len(numbers)):
num = numbers[i]
if num in left:
arr[i] = 'L'
finger[0] = num
elif num in right:
arr[i] = 'R'
finger[1] = num
else:
number_position = position[num]
left_finger = position[finger[0]]
right_finger = position[finger[1]]
distance_left = abs(number_position[0]-left_finger[0]) + abs(number_position[1]-left_finger[1])
distance_right = abs(number_position[0]-right_finger[0]) + abs(number_position[1]-right_finger[1])
if distance_left < distance_right:
arr[i] = 'L'
finger[0] = num
elif distance_left > distance_right:
arr[i] = 'R'
finger[1] = num
else:
if hand == 'left':
arr[i] = 'L'
finger[0] = num
else:
arr[i] = 'R'
finger[1] = num
answer = "".join(arr)
return answer
각 번호간의 거리를 어떻게 처리할지 고민하다가 키패드를 좌표라고 생각하고 각 숫자의 위치를 값으로 갖는 배열 position
을 만들었다.
finger
는 현재 엄지 손가락의 위치를 나타내는 배열로 0번 index의 값은 왼손가락의 위치, 1번 index는 오른손가락의 위치이다.
번호가 특정 손으로 눌러야 한다면 결과(arr
)에 추가한 후 현재 손가락의 위치만 업데이트 해주었다. 만약 가운데 줄에 위치하는 숫자(2,5,8,0) 중 하나라면 각 거리를 계산했다. 거리마저 똑같다면 문제에서 말한대로 hand
에 따라 선택하도록 했다. 별(“*“)과 샵(“#”)은 숫자 10,11로 두었다. 숫자 0은 가장 작은 수긴 하지만, 좌표가 10의 위치이기 때문에 position
배열의 가장 처음에 온다.