상세 컨텐츠

본문 제목

키패드 누르기 (2020 카카오 인턴십)

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 6. 24. 11:17

본문

원본 : 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

 

풀이

class Solution {
    public String solution(int[] numbers, String hand) {

        Coordinate leftHand = new Coordinate(0, 0);
        Coordinate rightHand = new Coordinate(2, 0);

        Coordinate[] coordinateArr = new Coordinate[10];
        coordinateArr[0] = new Coordinate(1, 0);
        coordinateArr[1] = new Coordinate(0, 3);
        coordinateArr[2] = new Coordinate(1, 3);
        coordinateArr[3] = new Coordinate(2, 3);
        coordinateArr[4] = new Coordinate(0, 2);
        coordinateArr[5] = new Coordinate(1, 2);
        coordinateArr[6] = new Coordinate(2, 2);
        coordinateArr[7] = new Coordinate(0, 1);
        coordinateArr[8] = new Coordinate(1, 1);
        coordinateArr[9] = new Coordinate(2, 1);

        StringBuilder stringBuilder = new StringBuilder();

        for (int number : numbers) {
            if (number == 1 || number == 4 || number == 7) {
                fn(leftHand, coordinateArr[number], stringBuilder, "L");
            } else if (number == 3 || number == 6 || number == 9) {
                fn(rightHand, coordinateArr[number], stringBuilder, "R");
            } else {
                Coordinate currentCoordinate = coordinateArr[number];
                int leftDiff = Math.abs(currentCoordinate.x - leftHand.x) + Math.abs(currentCoordinate.y - leftHand.y);
                int rightDiff = Math.abs(currentCoordinate.x - rightHand.x) + Math.abs(currentCoordinate.y - rightHand.y);

                if (leftDiff < rightDiff) {
                    fn(leftHand, currentCoordinate, stringBuilder, "L");
                } else if (leftDiff > rightDiff) {
                    fn(rightHand, currentCoordinate, stringBuilder, "R");
                } else {
                    if (hand.equals("left")) {
                        fn(leftHand, currentCoordinate, stringBuilder, "L");
                    } else {
                        fn(rightHand, currentCoordinate, stringBuilder, "R");
                    }
                }
            }
        }

        return stringBuilder.toString();
    }

    private void fn(Coordinate Hand, Coordinate currentCoordinate, StringBuilder stringBuilder, String hand) {
        Hand.x = currentCoordinate.x;
        Hand.y = currentCoordinate.y;
        stringBuilder.append(hand);
    }
}

class Coordinate {
    int x;
    int y;

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

관련글 더보기

댓글 영역