코딩테스트

[코딩테스트(Java)] 프로그래머스 67256 키패드 누르기

inhooo00 2025. 3. 15. 16:23

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

public String solution(int[] numbers, String hand) {
    String answer = "";
    int l = 10, r = 12;

    for (int number : numbers) {
        if (number == 1 || number == 4 || number == 7) {
            l = number;
            answer += "L";
        } else if (number == 3 || number == 6 || number == 9) {
            r = number;
            answer += "R";
        } else {
            int leftD = getDistance(l,number);
            int rightD = getDistance(r,number);
            if (leftD < rightD) {
                l = number;
                answer += "L";
            } else if (leftD > rightD) {
                r = number;
                answer += "R";
            } else if (hand.equals("right")) {
                r = number;
                answer += "R";
            } else {
                l = number;
                answer += "L";
            }
        }
    }
    return answer;
}

private int getDistance(int current, int target) {
    if (current == 0) {
        current = 11;
    }
    if (target == 0) {
        target = 11;
    }

    int curRow = (current - 1) / 3;
    int curCol = (current - 1) % 3;

    int targetRow = (target - 1) / 3;
    int targetCol = (target - 1) % 3;

    return Math.abs(curRow - targetRow) + Math.abs(curCol - targetCol);
}

 

 

 

📍포인트

1. // 1 2 3// 4 5 6// 7 8 9// 10 11 12 형식으로 핸드폰이 구성되어 있다고 setting.
2. 거리를 구하는 포인트를 인지하고 진행하면 된다.
3. 좌표를 어떻게 처리할지 생각해보자. hint) 3*4 격자