프로그래머스 LEVEL 1([카카오 인턴] 키패드 누르기)
-
사용 언어 : javascript
-
해결 날짜 : 2022-08-04
-
해결 방법 :
- 숫자패드 끼리 거리를 구하기 위해 *은 10, 0은 11, #은 12로 인덱싱
- 1,4,7인 경우 L
- 3,6,9인 경우 R
- 2,5,8,0인 경우 각 엄지 손가락과의 거리 비교를 통해 거리가 짧은 쪽으로 선택
- 거리가 같은 경우 hand값에 따라 선택
-
코드
const difference = (a, b) => {
return Math.abs(a - b);
}
const realDistance = (distance) => {
if(distance === 0) return 0;
else if(distance === 1 || distance === 3) return 1;
else if(distance === 2 || distance === 4 || distance === 6) return 2;
else if(distance === 5 || distance === 7 || distance === 9) return 3;
else return 4;
}
function solution(numbers, hand) {
var answer = '';
var thumbs = [10, 12];
for (number of numbers) {
switch(number) {
case 1:
case 4:
case 7:
answer += 'L';
thumbs[0] = number;
break;
case 3:
case 6:
case 9:
answer += 'R';
thumbs[1] = number;
break;
case 2:
case 5:
case 8:
case 0:
number = number === 0 ? 11 : number;
var leftDistance = realDistance(difference(thumbs[0], number));
var rightDistance = realDistance(difference(thumbs[1], number));
if(leftDistance > rightDistance) {
answer += 'R';
thumbs[1] = number;
} else if(leftDistance < rightDistance) {
answer += 'L';
thumbs[0] = number;
} else {
if(hand === 'left') {
answer += 'L';
thumbs[0] = number;
}
else {
answer += 'R';
thumbs[1] = number;
}
}
break;
}
}
return answer;
}