개발/코딩

[프로그래밍] 프로그래머스 예제문제 풀어보기 <키패드누르기> (성공)

mabb 2022. 3. 21. 23:17
반응형

키패드를 왼손으로 누를지 오른손으로 누를지 결정하는 문제. 
왼쪽의 1,4,7은 왼손으로 누름
오른쪽의 3,6,9는 오른손으로 누름.
가운데 2,5,8,0은 현재의 왼손 , 오른손의 위치를 비교하여 가까운 손가락으로 누름
거리가 같다면 오른손잡이인지 왼손잡이인지를 확인하여 누름.
2,5,8,0과 손의 위치를 재기위하여 *,0,# 을 각각 숫자 10,11,12로 치환하였다.
이렇게 하면 현재 손의 위치와 2,5,8,0과의 거리는
두 숫자의 차이를 3으로나눈 몫+ 나머지가 된다.
재밌는 문제였다.

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
class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
        
        
        int left =10;
        int right = 12;
        int leftDistance = 0;
        int rightDistance = 0;        
        for (int num: numbers){
            if(num==0){
                num=11;
            }
            if(num==1|num==4|num==7){
                left = num;
                answer += "L";
            }
            if(num==3|num==6|num==9){
                right = num;
                answer += "R";
            }
            if(num==2|num==5|num==8|num==11){
                leftDistance = ((Math.abs(num-left))/3+((Math.abs(num-left))%3);
                rightDistance = ((Math.abs(num-right))/3+((Math.abs(num-right))%3);
            
            if(leftDistance<rightDistance){
               answer += "L";
               left = num;
            }else if(leftDistance>rightDistance){
               answer += "R"
               right = num;
            }else if(leftDistance==rightDistance){
               answer += hand.toUpperCase().charAt(0);
                if(hand.equals("right")){
                    right = num;
                }
                if(hand.equals("left")){
                    left = num;
                }
            }
            }         
        }
             
        
        return answer;
    }
}
cs

출처: 프로그래머스

 

반응형