ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level1) 키패드 누르기
    PS/programmers 2021. 4. 27. 10:33
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    /*
        왼손 시작 *, 오른손 시작 #, number : 0~9
         1, 4, 7 은 무조건 왼손
         3, 6, 9 는 무조건 오른손
         두 손가락에서의 키패드 거리가 같다면 hand 쪽으로 누른다.
     */
     
    public class Level1_키패드누르기 {
        static int leftPosition = 10;
        static int rightPosition = 12;
        static final char LEFT = 'L';
        static final char RIGHT = 'R';
        static String hand = "";
     
        public static String solution(int[] numbers, String s) {
            StringBuilder sb = new StringBuilder();
            hand = s;
     
            for (int number : numbers) {
                sb.append(getAnswer(number));
            }
     
            return sb.toString();
        }
     
        private static char getAnswer(int number) {
            if (number == 1 || number == 4 || number == 7) {
                leftPosition = number;
                return LEFT;
            }
     
            if (number == 3 || number == 6 || number == 9) {
                rightPosition = number;
                return RIGHT;
            }
     
            // 2, 5, 8, 0 일때는 leftPosition, rightPosition 을 비교해야함
            int leftDistance = getDistance(number, leftPosition);
            int rightDistance = getDistance(number, rightPosition);
     
            return getHand(leftDistance - rightDistance, number);
        }
     
        private static int getDistance(int number, int position) {
            position = position == 0 ? 11 : position;
            number = number == 0 ? 11 : number;
     
            int curX = (position - 1/ 3;
            int curY = (position - 1) % 3;
            int targetX = number / 3;
            int targetY = 1;
     
            return Math.abs(curX - targetX) + Math.abs(curY - targetY);
        }
     
        private static char getHand(int distance, int number) {
            if (distance < 0) {
                leftPosition = number;
                return LEFT;
            } else if (distance > 0) {
                rightPosition = number;
                return RIGHT;
            }
     
            // 어느손인지 비교
            if (hand.equals("left")) {
                leftPosition = number;
                return LEFT;
            } else {
                rightPosition = number;
                return RIGHT;
            }
        }
     
        public static void main(String[] args) {
            int[] numbers = {70828315762};
            String hand = "left";
            System.out.println(solution(numbers, hand));
        }
    }
     
    cs

    'PS > programmers' 카테고리의 다른 글

    Level1) 신규아이디추천  (0) 2021.04.29
    Level1) 3진법 뒤집기  (0) 2021.04.28
    Level1) 다트게임  (0) 2021.04.27
    Level1) 비밀지도  (0) 2021.03.17
    Level1) 실패율  (0) 2021.03.16
킹수빈닷컴