알고리즘/프로그래머스

[프로그래머스]JAVA - Level 1. 키패드 누르기

K.두부 2022. 4. 6. 22:57
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        // 초기 엄지손가락 위치 설정 *(0,3), #(2,3)
        int lx = 0;
        int ly = 3;
        int rx = 2;
        int ry = 3;
        
        for (int i=0; i<numbers.length; i++) {
            
            switch (numbers[i]) {
                // 왼쪽 엄지손가락
                case 1, 4, 7:
                    answer += "L";
                    lx = 0;
                    ly = numbers[i] / 3;
                    break;
                // 오른쪽 엄지손가락
                case 3, 6, 9:
                    answer += "R";
                    rx = 2;
                    ry = (numbers[i] / 3) - 1;
                    break;
                case 0, 2, 5, 8:
                    int x = 1;
                    int y = 0;
                    if (numbers[i] == 0) {
                        y = 3;
                    } else {
                        y = numbers[i] / 3;
                    }
                    
                    int chklx = Math.abs(lx - x);
                    int chkly = Math.abs(ly - y);
                    int chkrx = Math.abs(rx - x);
                    int chkry = Math.abs(ry - y);
                    
                    // 왼쪽 엄지손가락이 더 가까움
                    if (chklx + chkly < chkrx + chkry) {
                        answer += "L";
                        lx = x;
                        ly = y;
                    // 오른쪽 엄지손가락이 더 가까움
                    } else if (chklx + chkly > chkrx + chkry) {
                        answer += "R";
                        rx = x;
                        ry = y;
                    } else if (chklx + chkly == chkrx + chkry) {
                        if (hand.equals("right")) {
                            answer += "R";
                            rx = x;
                            ry = y;
                        } else {
                            answer += "L";
                            lx = x;
                            ly = y;
                        }
                    }
                    break;
            }
        }
        return answer;
    }
}

 

 

반응형