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

class Solution {
    public String solution(int[] numbers, String hand) {
       String answer = "";
        int leftRow = 3;
        int leftCol = 0;
        int midRow;
        int midCol = 1;
        int rightRow = 3;
        int rightCol = 2;

        for (int i = 0; i < numbers.length; i++) {
            int n = numbers[i]; // 현재 누른 번호

            if (n == 1 || n == 4 || n == 7) {
                leftRow = n / 3;
                leftCol = 0;
                answer += "L";
            } else if (n == 3 || n == 6 || n == 9) {
                rightRow = (n / 3) - 1;
                rightCol = 2;
                answer += "R";
            } else { // n == 2 || n == 5 || n == 8 || n == 0
                midRow = (n == 0 ? 3 : (n / 3));
	
    			// 현재 누른 번호와 왼손 위치, 오른손 위치 각각의 차이 구하기
                int leftDistance = Math.abs(midRow - leftRow) + Math.abs(midCol - leftCol);
                int rightDistance = Math.abs(midRow - rightRow) + Math.abs(midCol - rightCol);

                if (leftDistance < rightDistance) { // 왼쪽이 더 가까운 경우
                    leftRow = midRow;
                    leftCol = midCol;
                    answer += "L";
                } else if (leftDistance > rightDistance) { // 오른쪽이 더 가까운 경우
                    rightRow = midRow;
                    rightCol = midCol;
                    answer += "R";
                } else { // 거리의 차이가 같은 경우 왼손잡이인지 오른손잡이인지 확인
                    if (hand.equals("left")) {
                        leftRow = midRow;
                        leftCol = midCol;
                        answer += "L";
                    } else {
                        rightRow = midRow;
                        rightCol = midCol;
                        answer += "R";
                    }
                }
            }
        }

        return answer;
    }
}

 

'programmers > Java' 카테고리의 다른 글

[programmers] 게임 맵 최단거리 / Java  (0) 2021.10.06
[programmers] 체육복 / Java  (0) 2021.08.18

+ Recent posts