프로그래머스 : 키패드 누르기
https://programmers.co.kr/learn/courses/30/lessons/67256
문제풀이
이번 문제는 프로그래머스의 2020 카카오 인턴십 코딩 테스트에서 출제되었던 문제입니다.
저는 생각보다 오래 걸렸던 문제입니다. 2, 5, 8, 0 숫자들의 위치와 손가락들의 거리를 비교하기 위한 식을 바로 생각해내지 못했습니다 ㅠㅠ
- 1, 4, 7에 해당하는 왼손 입력
- 3, 6, 9에 해당하는 오른손 입력
- 2, 5, 8, 9에 해당하는 가장 가까운손 입력
- 두 엄지 손가락의 거리가 같다면, 주로 사용하는 손 입력
코드
function solution(numbers, hand) {
let 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);
// 손가락과 눌러야하는 버튼의 거리를 구함
tmpL = Math.floor(tmpL/3) + Math.floor(tmpL%3);
tmpR = Math.floor(tmpR/3) + Math.floor(tmpR%3);
// 문제의 그 식..
// 거리를 나눈 몫과 나머지를 더하면 한 쪽 손가락이 2, 5, 8, 0에 위치하더라도 동일한 거리값을 구할 수 있음
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;
}
리뷰
한 쪽 엄지 손가락이 2, 5, 8, 0에 위치했을 때 숫자로써 동일한 거리값을 구하는 방법을 찾는 것이 가장 어려웠습니다ㅠㅠ..
문제를 보고 바로 해당 방법을 생각해 낼 수 있었다면 그리 어렵지는 않았을 것 같아요! (물론 전 아님)
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
타겟 넘버 / js 풀이 (0) | 2021.07.08 |
---|---|
크레인 인형뽑기 게임 / js 풀이 (0) | 2021.07.07 |
멀쩡한 사각형 / js 풀이 (0) | 2021.06.29 |
신규 아이디 추천 / js 풀이 (0) | 2021.06.23 |
폰켓몬 / js 풀이 (0) | 2021.06.22 |