(Python, Java) 프로그래머스 - 키패드 누르기

[문제 링크]

Python 풀이

def solution(numbers, hand):
    answer = ''
    # 패드 위치
    pad = [[3, 1]]
    for i in range(4):
        for j in range(3):
            pad.append([i, j])

    left = [3, 0]
    right = [3, 2]
    for number in numbers:
        if number in [1, 4, 7]:
            left = pad[number]
            answer += "L"
        elif number in [3, 6, 9]:
            right = pad[number]
            answer += "R"
        else:
            position = pad[number]
            leftDistance = abs(left[0] - position[0]) + abs(left[1] - position[1])
            rightDistance = abs(right[0] - position[0]) + abs(right[1] - position[1])

            if leftDistance < rightDistance or (leftDistance == rightDistance and hand == "left"):
                left = position
                answer += "L"
            else:
                right = position
                answer += "R"

    return answer

Java 풀이

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    Integer[] leftSide = {1,4,7};
    Integer[] rightSide = {3,6,9};

    Pad leftFinger = new Pad(3, 0);
    Pad rightFinger = new Pad(3, 2);

    public String solution(int[] numbers, String hand) {
        String answer = "";

        List<Pad> padList = new ArrayList<>();
        padList.add(new Pad(3,1)); // 0

        // 패드 위치 초기화
        for (int i=0;i<3;i++){
            for (int j=0;j<3;j++){
                padList.add(new Pad(i,j));
            }
        }

        answer = pushNumber(numbers, hand,padList);

        return answer;
    }

    private String pushNumber(int[] numbers, String hand, List<Pad> padList) {
        String answer = "";
        for (int number : numbers) {
            if(Arrays.asList(leftSide).contains(number)){
                leftFinger = padList.get(number);
                answer +="L";
            }
            else if (Arrays.asList(rightSide).contains(number)){
                rightFinger = padList.get(number);
                answer +="R";
            }
            else{
                Pad target = padList.get(number);
                int leftDistance = target.getDistance(leftFinger);
                int rightDistance = target.getDistance(rightFinger);
                if (leftDistance >rightDistance || (leftDistance == rightDistance && hand.equals("right"))){
                    rightFinger = target;
                    answer +="R";
                }
                else{
                    leftFinger = target;
                    answer +="L";
                }
            }
        }
        return answer;
    }

    class Pad {
        private int x;
        private int y;

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

        public int getDistance(Pad pad){
            return Math.abs(x-pad.x) + Math.abs(y-pad.y);
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] numbers = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
        String hand = "right";
        System.out.println(solution.solution(numbers,hand));
    }
}

© 2021. By Backtony