알고리즘 문제풀이/프로그래머스

키패드 누르기 / js 풀이

Heman 2021. 7. 2. 17:43

프로그래머스 : 키패드 누르기

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에 위치했을 때 숫자로써 동일한 거리값을 구하는 방법을 찾는 것이 가장 어려웠습니다ㅠㅠ..

문제를 보고 바로 해당 방법을 생각해 낼 수 있었다면 그리 어렵지는 않았을 것 같아요! (물론 전 아님)