본문 바로가기
알고리즘/코딩 테스트 문제

[프로그래머스] 키패드 누르기(Java)

by 진진리 2023. 10. 22.
728x90
  • 제출한 코드
    public String solution(int[] numbers, String hand) {
        StringBuilder answer = new StringBuilder();
        int[][] keypad = {{1, 4, 7, -1}, {2, 5, 8, 0}, {3, 6, 9, -1}};
        int[] left = {0, 3};
        int[] right = {2, 3};
        int[] now = new int[2];
        
        for (int number : numbers) {
            char c = '0';
            for (int j = 0; j < 3; j++) {
                for (int k = 0; k < 4; k++) {
                    if (number == keypad[j][k]) {
                        now[0] = j;
                        now[1] = k;
                        break;
                    }
                }
            }
            if (now[0] == 0) c = 'L';
            else if (now[0] == 2) c = 'R';
            else {
                int Ldistance = Math.abs(now[0] - left[0]) + Math.abs(now[1] - left[1]);
                int Rdistance = Math.abs(now[0] - right[0]) + Math.abs(now[1] - right[1]);
                if (Ldistance == Rdistance) c = (char)(hand.charAt(0)-'a'+'A');
                else if (Ldistance < Rdistance) c = 'L';
                else c = 'R';
            }

            answer.append(c);
            if (c == 'L') {
                left[0] = now[0];
                left[1] = now[1];
            } else {
                right[0] = now[0];
                right[1] = now[1];
            }
        }
        return answer.toString();
    }

키패드의 숫자 위치를 2차원 배열을 이용해 표현하고 왼손과 오른손의 위치, 입력해야 하는 숫자의 위치를 사용하였다.

더 가까운 손가락을 선택할 때에는 거리를 구한 후 더 짧은 거리의 손가락을 선택한다.

 

다른 사람이 제출한 코드를 보면 알고리즘 자체는 유사하나 중간의 거리 구하기, 손가락 구하기 등을 따로 함수로 뺀 부분이 더 좋았다.

그리고 다른 코드의 경우 처음부터 2차원 배열로 각 숫자의 위치를 초기화하였기 때문에 나처럼 초반에 이중 for문으로 현재 숫자의 위치를 찾을 필요가 없었다.

이번에 코드를 작성하면서 이중 for문으로 현재 숫자의 키패드 위치를 찾는 부분이 반복 횟수가 3, 4로 정해져있어 시간이 많이 걸리지 않아 괜찮다고 생각하였으나 그래도 다음부터는 최대한 이중 for문을 사용하지 않기 위해 노력해야겠다.

 

  • 다른 사람이 제출한 코드 참고

https://school.programmers.co.kr/learn/courses/30/lessons/67256/solution_groups?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr