알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 키패드 누르기

류창 2021. 8. 10. 22:07
반응형

문제분석

문제를 요약하자면, 1 4 7 키패드는 왼손이, 3 6 9 키패드는 오른손이, 

중앙 키패드는 맨허튼거리를 이용해 짧은쪽이 클릭하고, 맨허튼 거리마저 같다면 hand의 따라서 클릭한다.

문제풀이

왼손 = 10 오른손=12 로 지정.

 

num이 1 4 7 이면 L을 삽입, num이 3 6 9라면 R을 삽입

 

num이 2 5 8 0 이라면 L과 R의 맨허튼거리를(getDist) 구하고, 거리에 따라 입력

 

거리마저도 같다면, hand의 따라서 입력한다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution {
    public  String solution(int [] n, String hand) {
        StringBuilder bd = new StringBuilder();
 
        int leftLocation = 10;
        int rightLocation = 12;
 
        for(int number : n) {
            if(number ==1 || number == 4 || number == 7) {
                bd.append("L");
                leftLocation = number;
            }else if(number == 3 || number == 6 || number == 9) {
                bd.append("R");
                rightLocation = number;
            }else { // 2 5 8 0 
                int distanceL = getDist(leftLocation, number);
                int distanceR = getDist(rightLocation, number);
 
                if(distanceL > distanceR) {
                    bd.append("R");
                    rightLocation = number;
                }else if(distanceL < distanceR) {
                    bd.append("L");
                    leftLocation = number;
                }else {
                    if(hand.equals("right")) {
                        bd.append("R");
                        rightLocation = number;
                    }else {
                        bd.append("L");
                        leftLocation = number;
                    }
                }
 
            }
        }
        return bd.toString();
    }
 
    public static int getDist(int location, int number) {
 
        if(number == 0) {
            number = 11;
        }
 
        if(location == 0) {
            location = 11;
        }
 
        int locationX = (location-1/ 3;
        int locationY = (location-1) % 3;
 
        int numberX = (number-1/ 3;
        int numberY = (number-1) % 3;
 
        return Math.abs(locationX-numberX) + Math.abs(locationY - numberY);
 
    }
}
cs
반응형