키패드 누르기

seheeee_97·2023년 12월 26일

회고팀

목록 보기
35/41





class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";

        // 초기 손의 위치
        int leftX = 0, leftY = 3;
        int rightX = 2, rightY = 3;

        for (int i = 0; i < numbers.length; i++) {
            int number = numbers[i];
            int targetX, targetY;

            // 각 번호의 위치 파악
            if (number == 0) {
                targetX = 1;
                targetY = 3;
            } else {
                targetX = (number - 1) % 3;
                targetY = (number - 1) / 3;
            }

            // 두 손의 현재 위치에서의 거리 계산
            //Math.abs 절댓값을 계산하는 메서드
            int leftDistance = Math.abs(leftY - targetY) + Math.abs(leftX - targetX);
            int rightDistance = Math.abs(rightY - targetY) + Math.abs(rightX - targetX);

            // 거리에 따라 손 결정
            if (number == 1 || number == 4 || number == 7) {
                // 숫자가 1, 4, 7인 경우 무조건 왼손 사용
                answer += "L";
                leftX = targetX;
                leftY = targetY;
            } else if (number == 3 || number == 6 || number == 9) {
                // 숫자가 3, 6, 9인 경우 무조건 오른손 사용
                answer += "R";
                rightX = targetX;
                rightY = targetY;
            } else {
                // 숫자가 2, 5, 8, 0인 경우 두 손 사이의 거리에 따라 결정
                if (leftDistance < rightDistance || (leftDistance == rightDistance && hand.equals("left"))) {
                    // 왼손이 더 가까우거나, 거리가 같지만 왼손잡이인 경우
                    answer += "L";
                    leftX = targetX;
                    leftY = targetY;
                } else {
                    // 오른손이 더 가까우거나, 거리가 같지만 오른손잡이인 경우
                    answer += "R";
                    rightX = targetX;
                    rightY = targetY;
                }
            }
        }

        return answer;
    }
}





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

0개의 댓글