[레벨1] 키패드 누르기 (JAVA)

Fekim·2022년 3월 15일
0

ps

목록 보기
42/48
class Solution {
    static class Point{
        int x,y;
        public Point(int x, int y){
            this.x = x;
            this.y = y;
        }
    }
    
    public String solution(int[] numbers, String hand) {
        HashMap<Integer, Point> pos = new HashMap<>();
        String answer = "";
        pos.put(1, new Point(0,0));
        pos.put(2, new Point(0,1));
        pos.put(3, new Point(0,2));
        pos.put(4, new Point(1,0));
        pos.put(5, new Point(1,1));
        pos.put(6, new Point(1,2));
        pos.put(7, new Point(2,0));
        pos.put(8, new Point(2,1));
        pos.put(9, new Point(2,2));
        pos.put(0, new Point(3,1));
        
        // 처음 왼,오른 손의 좌표 초기화
        Point pLeft = new Point(3,0);
        Point pRight = new Point(3,2);
        
        for(int i=0; i<numbers.length; ++i){
            int next = numbers[i];  // 눌러야 할 좌표
            if(next == 1 || next == 4 || next == 7){    // 왼쪽 키패드일 경우
                pLeft = new Point(pos.get(next).x, pos.get(next).y);
                answer += "L";
            }
            else if(next == 3 || next == 6 || next == 9){   // 오른쪽 키패드일 경우
                pRight = new Point(pos.get(next).x, pos.get(next).y);
                answer += "R";
            }
            else{   // 가운데 줄 키패드인 경우
                int ld = Math.abs(pos.get(next).x - pLeft.x)  // right distance 
                                 + Math.abs(pos.get(next).y - pLeft.y);
                int rd = Math.abs(pos.get(next).x - pRight.x)
                                + Math.abs(pos.get(next).y - pRight.y);
                if(ld == rd){   // 거리가 같은경우
                    if(hand.equals("left")){    // 왼손잡이
                        pLeft = new Point(pos.get(next).x, pos.get(next).y);
                        answer += "L";
                    }
                    else{       // 오른손잡이
                        pRight = new Point(pos.get(next).x, pos.get(next).y);
                        answer += "R";
                    }
                }
                else{   // 거리가 다른 경우
                    if(ld < rd){    // 왼손으로 누르는 거리가 더 작은 경우
                        pLeft = new Point(pos.get(next).x, pos.get(next).y);
                        answer += "L";
                    }
                    else{           // 오른손으로 누르는 거리가 더 작은 경우
                        pRight = new Point(pos.get(next).x, pos.get(next).y);
                        answer += "R";
                    }
                }
            }
        }
        return answer;
    }
}
profile
★Bugless 2024★

0개의 댓글