코진남

프로그래머스 키패드 문제 본문

코딩테스트

프로그래머스 키패드 문제

woojin126 2022. 3. 23. 15:11
class Solution {
    public String solution(int[] numbers, String hand) {
          StringBuilder answer = new StringBuilder();
        int left = 10;
        int right = 12;

        for (int num : numbers) {
            switch (num) {
                case 1 : case 4 : case 7 : {
                    answer.append("L");
                    left = num;
                    break;
                }
                case 3 : case 6 : case 9 : {
                    answer.append("R");
                    right = num;
                    break;
                }
                default: {
                    if (num == 0) num = 11;
                    int minLeft = left > num ? left - num : num - left;
                    int minRight = right > num ? right - num : num - right;

                    int distanceL = (minLeft % 3) + (minLeft / 3);
                    int distanceR = (minRight % 3) + (minRight / 3);

                    if (distanceL > distanceR) {
                        answer.append("R");
                        right = num;
                        break;
                    } else if(distanceR> distanceL) {
                        answer.append("L");
                        left = num;
                        break;
                    } else {
                        if (hand.equals("right")) {
                            answer.append("R");
                            right = num;
                        }else {
                            answer.append("L");
                            left = num;
                        }
                    }
                }

            }
        }
        return answer.toString();
    }
}

문제접근 1. 번호 1, 4, 7 은 무조건 left

            2. 번호 3 ,6 ,9 는 무조건 right

            3. 문제를 보니 *, # 은 처음 시작할때 위치 (다시 가는일 없음)

            4. 번호 2, 5, 8, 0 은 중간에 위치한 키패드인데, 왼손 오른손 가까이에 위치해있는 손으로 움직임.

            그럼여기서 현재 내 왼손, 오른손 위치가 어디에있느냐에 따라 가운데 키패드에 가까운 경로로 접근을 해야하 는경로구하는 규칙을 구해야함

 

1. 왼손, 오른손 변수를 두고, 현재 손 위치를 기준으로 다음 가까운 번호를 누를 때 변수에 해당하는 손에 이동한 번호를 저장한다. 

point. 현재 왼손 오른손 위치에서 다음 번호로 갈 경로 길이를 구해야함

2.왼손 오른손으로부터 같은 거리에 있는 값은 (왼손, 오른손) 잡이로 구분한다.