프로그래머스 Level 1 - 키패드 누르기

크롱·2023년 12월 16일
0

코딩테스트

목록 보기
57/61

내 풀이 설명

 const keypads=[[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]

키패드의 배열을 정의했따.

그리고 왼손, 오른손의 위치를 기록하기위해 변수생성

  let left=[3,0]
  let right=[3,2]
    

그리고문제에서는 내가 눌러야하는 numbers의 배열이 제공되는데,
예를들어
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]라면
키패드의 배열안에서 각 숫자의 위치를 알아야한다.
그래서 findkey라는 함수를 생성

function findkey(target){
       const keypads=[[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]

       for(let i=0;i<4;i++){
           for(let j=0;j<3;j++){
               if(keypads[i][j]==target){
                   return [i,j]
               }
           }
       }

}

만약 왼손 위치가 [1,0] :4
오른손 위치가 [0,2] : 3

findkey로 알아낸 눌러야할 number(target)의 위치가 [1,1] : 5
이라면
왼손이 현재 4에 있으므로, 1칸만 이동
오른손은 3에 위치 -> 2칸 이동
이를 어떻게 구하냐면,

let totalL=   Math.abs(target[0]-left[0])+Math.abs(target[1]-left[1])
let totalR=  Math.abs(target[0]-right[0])+Math.abs(target[1]-right[1])

전체적인 핵심 풀이는 이러하다.

내 풀이 코드

function findkey(target){
       const keypads=[[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]

       for(let i=0;i<4;i++){
           for(let j=0;j<3;j++){
               if(keypads[i][j]==target){
                   return [i,j]
               }
           }
       }

}

function solution(numbers, hand) {
      var answer = '';

     let left=[3,0]
     let right=[3,2]

     for(let i=0;i<numbers.length;i++){
      let target=   findkey(numbers[i])//target =[0,0]

         if(target[1]==0){
             answer=answer+'L'
             left=target

         }else if(target[1]==2){
             answer=answer+'R'
             right=target
         }else if(target[1]==1){


          let totalL=   Math.abs(target[0]-left[0])+Math.abs(target[1]-left[1])
          let totalR=  Math.abs(target[0]-right[0])+Math.abs(target[1]-right[1])

            if(totalL==totalR){

                  if(hand==='right'){
                  answer=answer+'R'
                  right=target

                     }else{
                answer=answer+'L'
               left=target
                    }

            }else if(totalL>totalR){//R을누름
                 answer=answer+'R'
                right=target
            }else if(totalL<totalR){
                answer=answer+'L'
                left=target
            }

         }


     }

   return answer;
}
profile
👩‍💻안녕하세요🌞

0개의 댓글