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

youngkyu MIn·2024년 1월 2일

문제링크 - 프로그래머스 - 키패드 누르기

class Solution {
    private static final int[][] keypad = {{1, 3}, {0, 0}, {1, 0}, {2, 0}, {0, 1}, {1, 1}, {2, 1}, {0, 2}, {1, 2}, {2, 2}};
    private static int[] left = {0, 3};
    private static int[] right = {2, 3};

    public static String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();
        for (int i : numbers) {
            String usedHand = getHand(i, hand);
            answer.append(usedHand);

            if (usedHand.equals("L")) {
                left = keypad[i];
            } else {
                right = keypad[i];
            }
        }
        return answer.toString();
    }

    private static String getHand(int number, String hand) {
        if (number == 1 || number == 4 || number == 7) {
            return "L";
        }
        if (number == 3 || number == 6 || number == 9) {
            return "R";
        }
        if (getDistance(left, number) < getDistance(right, number)) {
            return "L";
        }
        if (getDistance(left, number) > getDistance(right, number)) {
            return "R";
        }
        return hand.equals("right") ? "R" : "L";
    }

    private static int getDistance(int[] pos, int number) {
        return Math.abs(pos[0] - keypad[number][0]) + Math.abs(pos[1] - keypad[number][1]);
    }
}
  1. 키패드 모양을 2차원 좌표로 표현하여 2차원배열로 만들고, 오른손 왼손의 위치도 좌표로 표현하여 배열로 나타냄

  2. getHand 에서 눌러야 하는 번호를 어느손이 누를지 선택함

  3. 양손 모두 누를 수 있는 번호에 대해 현재 손으로부터 눌러야하는 번호까지의 거리를 getDistance 를 통해 구함

profile
한 줄 소개

0개의 댓글