말랑한 하루
[Programmers] 키패드 누르기 (Lv 1, JavaScript) 본문
반응형
[ 학습 내용 ]
키패드를 층과 좌, 중, 우로 분할했을 때 해당되는 숫자는
층은 몫으로, 위치는 3n-2, 3n-1, 3n으로 분류할 수 있다.
위 식의 경우 나머지연산을 통해 분류는 가능하나, 우측 몫이 나누어 떨어지는 부분으로 인해 층분류에 알맞지 않았다.
그래서 키패드 전체 수를 1씩 낮춰 2n, 2n+1, 2n+2로 식을 세워 층분류, 좌우분류가 가능하게 만들었다.
전체적인 키패드의 모습은 다음과 같다.
[ 소스 코드 ]
function solution(numbers, hand) {
var answer = '';
let left_hand = 9, right_hand = 11;
const onLeft = (number) => {
answer += "L";
left_hand = number;
}
const onRight = (number) => {
answer += "R";
right_hand = number;
}
const calcDist = (pad, number) => {
return Math.abs(parseInt(pad / 3) - parseInt(number / 3))
+ Math.abs(pad % 3 - number % 3);
}
numbers.map((number) => {
number = number === 0? number = 10 : number - 1;
switch(number % 3) {
case 0:
onLeft(number);
break;
case 1:
let left_dist = calcDist(left_hand, number);
let right_dist = calcDist(right_hand, number);
if (left_dist === right_dist) {
hand === "left" ? onLeft(number) : onRight(number);
} else {
left_dist < right_dist ? onLeft(number) : onRight(number);
}
break;
case 2:
onRight(number);
break;
}
})
return answer;
}
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 실패율 (Lv 1, JavaScript) (0) | 2022.07.06 |
---|---|
[Programmers] 크레인 인형뽑기 게임 (Lv 1, JavaScript) (0) | 2022.07.06 |
[Programmers] 숫자 문자열과 영단어 (Lv 1, JavaScript) (0) | 2022.06.29 |
[Programmers] 신규 아이디 추천 (Lv 1, JavaScript) (0) | 2022.06.29 |
[Programmers] 신고 결과 받기 (Lv 1, JavaScript) (0) | 2022.06.27 |
Comments