ref: https://programmers.co.kr/learn/courses/30/lessons/67256
가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때
더 가까운 엄지손가락을 사용
거리가 같다면, 편한 손가락 사용.
번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return
numbers 배열의 크기는 1 이상 1,000 이하
구현 문제, 2차원 리스트 이동.
numbers가 최대 1000이라 해도 시간복잡도 걱정을 할 필요 없다.
def solution(numbers, hand):
number_x_y = {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)}
answer = ''
left_posi = '*'
right_posi = '#'
for number in numbers:
if number in [1,4,7,'*']:
left_posi = number
answer += 'L'
elif number in [3,6,9,'#']:
right_posi = number
answer += 'R'
else:
left_dist = abs(number_x_y[left_posi][0] - number_x_y[number][0]) + abs(number_x_y[left_posi][1] - number_x_y[number][1])
right_dist = abs(number_x_y[right_posi][0] - number_x_y[number][0]) + abs(number_x_y[right_posi][1] - number_x_y[number][1])
if left_dist < right_dist:
left_posi = number
answer += 'L'
elif left_dist > right_dist:
right_posi = number
answer += 'R'
else:
if hand == 'left':
left_posi = number
answer += 'L'
else:
right_posi = number
answer += 'R'
return answer
function solution(numbers, hand) {
const btnMap = {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]}
const leftPart = [1,4,7,'*'];
const rightPart = [3,6,9,'#'];
let leftNow = '*';
let rightNow = '#';
let answer = ''
for(let i=0; i<numbers.length; i++){
if (leftPart.includes(numbers[i])){
leftNow = numbers[i];
answer += 'L';
} else if (rightPart.includes(numbers[i])){
rightNow = numbers[i];
answer += 'R';
} else{
const nowXY = btnMap[numbers[i]];
const leftXY = btnMap[leftNow];
const rightXY = btnMap[rightNow];
const leftDist = Math.abs(nowXY[0]-leftXY[0]) + Math.abs(nowXY[1]-leftXY[1]);
const rightDist = Math.abs(nowXY[0]-rightXY[0]) + Math.abs(nowXY[1]-rightXY[1]);
if (leftDist<rightDist){
leftNow = numbers[i]
answer += 'L';
}else if(leftDist>rightDist){
rightNow = numbers[i]
answer += 'R';
}else{
if(hand === 'left'){
leftNow = numbers[i]
answer += 'L';
} else{
rightNow = numbers[i]
answer += 'R';
};
};
}
};
return answer;
}