본문 바로가기

알고리즘 문제 풀이

프로그래머스[LEVEL 1]("2020 카카오 인턴쉽") - 키패드 누르기

https://programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

 

문제 풀이

 

문제 유형은 '구현' 유형에 속한다  코드가 엄청 복잡하게 나왔다  LEVEL 1문제 수준에선 상당히 어려운 문제인것 같다 

 

문제 접근법은  먼저  keypad라는 2차원 배열을 선언해주고  그 안에  문제에서 제시한 키패드 값을 넣어주었다 

 키패드 값을 넣어준 이유는  오른손과 왼손의  위치를  파악하기 위해서다 

 

또한  위치 파악을 위해 position함수를 선언해주었고  이후에는  rightHand와  leftHand 변수를 선언한다음  오른손과 왼손의  초기 위치 값을 넣었다 

 

그다음은  numbers 배열을  forEach()함수로 순회하면서  조건에 맞추어  왼손과 오른손이 누를 수 있는 값에 따라 'L'과 'R'값을  result 변수에  넣어주었다  

 

이제 제일 중요한  가운데 숫자  0,2,5,8, 일 경우인데   가운데 숫자의  위치를  position함수를 통해 파악한 다음 

오른손에 위치와  가운데 숫자  그리고 왼손과  가운데 숫자의  위치를 비교해  거리를 계산한다음  조건에  맞게  

'L'과 'R'을 result에 추가해주었다  마지막으로  만약  구한  각각의  거리가 같다면  사용자가  오른손잡이인지  왼손잡이인지에 따라  result에  알맞는 값을  추가하는 방식으로  문제를 해결했다