이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 한다.
맨 처음 왼손 엄지손가락은 * 키패드에, 오른손 엄지 손가락은 # 키패드 위치에서 시작하며,
엄지손가락을 사용하는 규칙은 다음과 같다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인지를 나타내는 문자열 hand가 매개변수로 주어질 때,
각 번호를 누른 엄지손가락이 왼손인지 오른손인지를 나타내는 연속된 문자열 형태로 return하도록 solution 함수를 완성하세요.
numbers | hand | result |
---|---|---|
[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” |
function solution(numbers, hand) {
var answer = '';
let leftThumb = 10, rightThumb = 12; // 왼손은 10, 오른손은 12로 설정
for(let i=0; i < numbers.length; i++) {
if(numbers[i] % 3 === 1) {
// 1, 4, 7 버튼
answer += 'L';
leftThumb = numbers[i];
}
else if(numbers[i] % 3 === 0 && numbers[i] !== 0) {
// 3, 6, 9 버튼
answer += 'R';
rightThumb = numbers[i];
}
else {
// 2, 5, 8, 0 버튼
if(numbers[i] === 0) numbers[i] = 11; // 0을 11로 설정
// 현재 손가락의 위치와 눌러야하는 버튼 사이의 거리를 구함
let tmpL = Math.abs(numbers[i] - leftThumb);
let tmpR = Math.abs(numbers[i] - rightThumb);
// 거리를 나눈 몫과 나머지를 더하면 한 쪽 손가락이 2, 5, 8, 0에 위치하더라도 동일한 거리값을 구할 수 있음
tmpL = Math.floor(tmpL / 3) + Math.floor(tmpL % 3);
tmpR = Math.floor(tmpR / 3) + Math.floor(tmpR % 3);
// 두 엄지손가락의 거리가 같은 경우
if(tmpL === tmpR) {
if(hand === 'right') {
answer += 'R';
rightThumb = numbers[i];
} else {
answer += 'L';
leftThumb = numbers[i];
}
}
else if(tmpL < tmpR) {
answer += 'L';
leftThumb = numbers[i];
} else {
answer += 'R';
rightThumb = numbers[i];
}
}
}
return answer;
}