[Programmers] : 2020 카카오인턴 > 키패드 누르기

🔗 문제 링크

https://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

 

💻 코드

package com.kyhslam.programmers.kakao;

import java.util.Arrays;

public class cp02 {

    public static int[][] board = {
            {0,0},{0,1},{0,2},
            {1,0},{1,1},{1,2},
            {2,0},{2,1},{2,2},
            {3,0},{3,1},{3,2}
    };



    public static void main(String[] args) {
        //int[] numbers = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
        int[] numbers = {7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2};
        String hand = "left";

        System.out.println(Arrays.deepToString(board));

        /*for(int i=0; i < board.length; i++) {
            for(int j=0; j < board[i].length; j++) {
                System.out.println(i + "+"+ j + "=" + board[i][j]);
            }
            System.out.println();
        }*/

        System.out.println(board[8-1][0] + " , " + board[8-1][1]);

        //System.out.println(Math.abs( (1) -2  ));


        StringBuilder sb = new StringBuilder();
        int leftIndex = 10;
        int rightIndex = 12;

        for(int number : numbers) {

            if (number == 1 || number == 4 || number == 7) {
                sb.append("L");
                leftIndex = number;
            } else if (number == 3 || number == 6 || number == 9) {
                sb.append("R");
                rightIndex = number;
            } else {

                if(number == 0) number = 11;

                int leftDistance = getDistance(number, leftIndex);
                int rightDistance = getDistance(number, rightIndex);

                if(leftDistance == rightDistance) {
                    if(hand.equals("left")){
                        sb.append("L");
                        leftIndex = number;
                    }else{
                        sb.append("R");
                        rightIndex = number;
                    }
                }

                if(leftDistance > rightDistance) {
                    sb.append("R");
                    rightIndex = number;
                }

                if(leftDistance < rightDistance) {
                    sb.append("L");
                    leftIndex = number;
                }
            }

        }

        System.out.println("###");
        System.out.println(sb.toString());
    }

    public static int getDistance(int pos, int curIndex) {
        int distance = 0;

        System.out.println(pos + " :: " + curIndex);
        int x = Math.abs( board[pos-1][0] -  board[curIndex-1][0]);
        int y = Math.abs( board[pos-1][1] -  board[curIndex-1][1]);

        distance = x+y;

        return distance;
    }
}

 

다른코드

class Solution {
    //        0부터 9까지 좌표 {y,x}
    int[][] numpadPos = {
            {3,1}, //0
            {0,0}, //1
            {0,1}, //2
            {0,2}, //3
            {1,0}, //4
            {1,1}, //5
            {1,2}, //6
            {2,0}, //7
            {2,1}, //8
            {2,2}  //9
    };
    //초기 위치
    int[] leftPos = {3,0};
    int[] rightPos = {3,2};
    String hand;
    public String solution(int[] numbers, String hand) {
        this.hand = (hand.equals("right")) ? "R" : "L";

        String answer = "";
        for (int num : numbers) {
            String Umji = pushNumber(num);
            answer += Umji;

            if(Umji.equals("L")) {leftPos = numpadPos[num]; continue;}
            if(Umji.equals("R")) {rightPos = numpadPos[num]; continue;}
        }
        return answer;
    }

    //num버튼을 누를 때 어디 손을 사용하는가
    private String pushNumber(int num) {
        if(num==1 || num==4 || num==7) return "L";
        if(num==3 || num==6 || num==9) return "R";

        // 2,5,8,0 일때 어디 손가락이 가까운가
        if(getDist(leftPos, num) > getDist(rightPos, num)) return "R";
        if(getDist(leftPos, num) < getDist(rightPos, num)) return "L";

        //같으면 손잡이
        return this.hand;
    }

    //해당 위치와 번호 위치의 거리
    private int getDist(int[] pos, int num) {
        return Math.abs(pos[0]-numpadPos[num][0]) + Math.abs(pos[1]-numpadPos[num][1]);
    }
}

댓글

Designed by JB FACTORY