반응형

 

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 disL = -1;
        int disR = -1;

        for(int i = 0; i < numbers.length; i++){
            int to = numbers[i];
            //to: 1, 4, 7
        //System.out.println(to+"disL: "+disL+"disR: "+disR);
            if(to == 1 || to == 4 || to == 7){
                answer = answer + "L";
                disL = to;
            }else if(to == 3 || to == 6 || to == 9){
                answer = answer + "R";
                disR = to;
            }else{
                //만약 disL, disR을 비교하라. 비교 후 작은 쪽을 첨가하고 to를 집어넣어라
                //만약 같다면 손을 비교하라
                //만약 왼손 거리가 짧다면
                if(fromTo(disL, to) < fromTo(disR, to)){
                    answer = answer + "L";
                    disL = to;
                }
                //만약 오른손 거리가 짧다면
                else if(fromTo(disL, to) > fromTo(disR, to)){
                    answer = answer + "R";
                    disR = to;
                }
                //같다면
                else{
                    if(hand.equals("left")){
                        answer = answer + "L";
                        disL = to;
                    }else{
                        answer = answer + "R";
                        disR = to;
                    }
                }
            }
        }
        //System.out.println(answer);
        return answer;
    }
    ///from: -1~9
    ///to: 2, 5, 8, 0
    int fromTo(int from, int to){



        //to: 2, 5, 8, 0
        switch(from){
            case -1:
                switch(to){
                    case 2:
                        return 4;
                    case 5:
                        return 3;
                    case 8:
                        return 2;
                    case 0:
                        return 1;
                }
                break;
                //left
            case 1:
                switch(to){
                    case 2:
                        return 1;
                    case 5:
                        return 2;
                    case 8:
                        return 3;
                    case 0:
                        return 4;
                }
                break;
            case 4:
                switch(to){
                    case 2:
                        return 2;
                    case 5:
                        return 1;
                    case 8:
                        return 2;
                    case 0:
                        return 3;
                }
                break;
            case 7:
                switch(to){
                    case 2:
                        return 3;
                    case 5:
                        return 2;
                    case 8:
                        return 1;
                    case 0:
                        return 2;
                }
                break;
                //right
            case 3:
                switch(to){
                    case 2:
                        return 1;
                    case 5:
                        return 2;
                    case 8:
                        return 3;
                    case 0:
                        return 4;
                }
                break;
            case 6:
                switch(to){
                    case 2:
                        return 2;
                    case 5:
                        return 1;
                    case 8:
                        return 2;
                    case 0:
                        return 3;
                }
                break;
            case 9:
                switch(to){
                    case 2:
                        return 3;
                    case 5:
                        return 2;
                    case 8:
                        return 1;
                    case 0:
                        return 2;
                }
                break;

                //middle
            case 2:
                switch(to){
                    case 2:
                        return 0;
                    case 5:
                        return 1;
                    case 8:
                        return 2;
                    case 0:
                        return 3;
                }
                break;
            case 5:
                switch(to){
                    case 2:
                        return 1;
                    case 5:
                        return 0;
                    case 8:
                        return 1;
                    case 0:
                        return 2;
                }
                break;
            case 8:
                switch(to){
                    case 2:
                        return 2;
                    case 5:
                        return 1;
                    case 8:
                        return 0;
                    case 0:
                        return 1;
                }
                break;
            case 0:
                switch(to){
                    case 2:
                        return 3;
                    case 5:
                        return 2;
                    case 8:
                        return 1;
                    case 0:
                        return 0;
                }
                break;  

        }
        return -1;
    }
}
반응형

+ Recent posts