ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 Lv.1] 키패드 누르기 java
    DEV/알고리즘 2020. 11. 19. 13:42

    문제설명

    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

    제한사항

    • numbers 배열의 크기는 1 이상 1,000 이하입니다.
    • numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
    • hand는 "left" 또는 "right" 입니다.
      • "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
    • 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.

     

    입출력 예

    numbers hand result
    [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"

     

    Solution

    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
    60
    61
    62
    63
    64
    65
    66
    class Solution {
        public String solution(int[] numbers, String hand) {
            String answer = "";
            int left = 10//*
            int right = 12//#
     
            for(int n : numbers) {
                if(n == 1 || n == 4 || n == 7) {
                    answer += "L";
                    left = n;
                }else if (n == 3 || n == 6 || n == 9) {
                    answer += "R";
                    right = n;
                }else if (n == 2 || n == 5 || n == 8 || n == 0) {
                    
                    if (distance(left,n)<distance(right,n)) {
                        answer += "L";
                        left = n;
                    }else if (distance(left,n)>distance(right,n)) {
                        answer += "R";
                        right = n;
                    }else {
                        
                        if(hand.equals("left")) {
                            answer += "L";
                            left = n;
                        }else if(hand.equals("right")) {
                            answer += "R";
                            right = n;
                        }
                    }
                    
                }
            }
            return answer;
        }
        
        public static int distance(int handLocation, int n) {
            /*
             
             * = 10
             0 = 11
             # = 12
             
             */
            if(handLocation==0) {
                handLocation = 11;
            }
            
            if(n==0) {
                n = 11;
            }
            
            int distance = 0;
            int num = Math.abs(n - handLocation);
            
            if(num%3==0) {
                distance = num/3;
            }else {
                distance = (num+1)/3 + 1;
            }
            
            return distance;
            
        }
    }
    cs

     

    처음엔 키패드 2,5,8,0을 누를때 if 조건에 Math.abs(location-n)을 비교하기만 하면 된다고 생각했는데

    그럼 오른손이 2에 있을때 5를 누르는 거리가 한칸으로 계산이 안된다 ㅠ

     

    그래서 distance 메소드를 따로 만들어서 Math.abs(location-n)을 3으로 나누어주어 해결! :)

    댓글

Designed by Tistory.