Algorithm & Data Structure/프로그래머스

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

ygreenb 2022. 2. 14. 13:34

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

 

풀이

왼손과 오른손의 위치를 저장해놓고 눌러야할 숫자까지의 거리를 구해서 비교한다.

눌러야할 숫자까지의 거리를 구하는 공식을 계산해내는데 오래걸렸다.

  • 위아래 거리 = (눌러야할 숫자(n) - 현재 손의 위치)  / 3
  • 좌우 거리 = (눌러야할 숫자(n) - 현재 손의 위치) % 3
class Solution {
    public String answer = "";
    public int left = 10, right = 12; // 엄지위치
    public String solution(int[] numbers, String hand) {
        for(int n : numbers){
            if(n == 1 || n == 4 || n == 7) selectLeft(n);
            else if(n == 3 || n == 6 || n == 9) selectRight(n);
            else {
                if(n==0) n=11;
                int l_dis = Math.abs(n-left)/3 + Math.abs(n-left)%3; // 상하+좌우 거리구함
                int r_dis = Math.abs(n-right)/3 + Math.abs(n-right)%3;
                if(l_dis<r_dis) selectLeft(n);
                else if(l_dis>r_dis) selectRight(n);
                else {
                    if(hand.equals("left")) selectLeft(n);
                    else selectRight(n);
                    
                }
            }
        }
        return answer;
    }
    public void selectLeft(int n){
        answer+='L';
        left=n;
    }
    public void selectRight(int n){
        answer+='R';
        right=n;
    }
}