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

난이도 : Level. 1
언어 : Javascript
출제 내역 : 2020 카카오 인턴십

❓ Question

스마트폰 키패드를 누르는데, 조건에 따라 번호를 눌러야 합니다.
양 손을 사용하는데 어떤 손가락으로 키패드를 눌렀는지 파악해야 합니다.

📝 My Solution

전체 풀이 코드 👈🏻 클릭시 Github로 이동

function solution(numbers, hand) {
    var answer = "";
    const numL = [1,4,7,'*'];
    const numR = [3,6,9,'#'];
    const numC = [2,5,8,0];
    let posL = [0,3];
    let posR = [0,3];
    let posC = [1,-1];

일단 손가락 별로 누를 수 있는 번호와 가운데 있는 번호
그리고 현재 손가락이 있는 위치를 나타낼 수 있는 배열도 만들어 줍니다.

      for (let i = 0; i<numbers.length; i++) {
            if (numL.indexOf(numbers[i]) >= 0) {
                answer += "L";
                posL = [0, numL.indexOf(numbers[i])];
            } else if (numR.indexOf(numbers[i]) >= 0) {
                answer += "R";
                posR = [0, numR.indexOf(numbers[i])];
            } 

우선 양 손가락이 누를 수 있는 번호가 들어오면
어떤 손으로 눌렀다 표시한 뒤,
해당 손가락이 있는 위치를 좌표로 만들어줍니다.

else {
       posC = [1, numC.indexOf(numbers[i])];
       let routeL = Math.abs(posC[0]-posL[0]) + Math.abs(posC[1]-posL[1]);
       let routeR = Math.abs(posC[0]-posR[0]) + Math.abs(posC[1]-posR[1]);
       if (routeL === routeR) {
           if (hand === 'right') {
               answer += 'R';
               posR = [1, numC.indexOf(numbers[i])];
           } else {
               answer += 'L';
               posL = [1, numC.indexOf(numbers[i])];
           }
       }

각 손가락만 누를 수 있는 번호를 걸러냈다면
이번에는 가운데 있는 번호를 어떤 손가락이 누를지 걸러줍니다.
현재 눌러야 하는 번호의 좌표를 지정해 주고,
현재 각 손가락이 있는 곳에서 그 번호까지 얼마나 이동해야 하는지 계산 한뒤,
같은 숫자라면 어떤 손 잡이인지 판단해서 해당 손으로 누르도록 해줍니다.

else {
   if (routeL < routeR) {
       answer += 'L';
       posL = [1, numC.indexOf(numbers[i])];
   } else {
       answer += 'R';
       posR = [1, numC.indexOf(numbers[i])];
   }
  }
 }
}
    return answer
}

만약 두 값이 다르다면 숫자가 작은 쪽이 가까운 쪽이기 때문에
해당 손으로 누를 수 있도록 해줘서 문제를 해결했습니다.

결과

굉장히 시간을 많이 썼지만... 그래도 해냈습니다..!

좋은 웹페이지 즐겨찾기