Programmers-K번째 수(정렬)

dropKick·2020년 7월 6일
0

코딩테스트

목록 보기
3/17

문제풀이

  • 반복문 사용, Arrays.copyOfRange()를 통해 배열 복사
    Arrays.sort() 이용 정렬
    K번째 값을 쭉 저장

  • 첫 풀이 : 인덱스 범위 오답
    copyOfRange를 통해 배열을 복사하고 정렬해서 K번째 수 찾기
    copyOfrange는 1 - 4 의 경우 2 3 만 출력 되니 전체 범위를 출력하고 싶어서
    시작 인덱스를 -1 했음

for (int i = 0; i < commands.length; i++) {
            for (int j = 0; j < commands.length; j++) {
                if (commands[i][j] != 0) {
                    arr = Arrays.copyOfRange(array, i-1, j);
                    Arrays.sort(arr);
                    list.add(arr[commands[i-1][j]);
                }
            }
        }
  • 두번째 풀이
    아주 간단한 문제인데 구현이 안되서 로직을 잘못 생각했나해서 풀이 참고
public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for (int i = 0; i < commands.length; i++) {
            int[] arr = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
            Arrays.sort(arr);
            answer[i] = arr[commands[i][2] - 1];
        }
        return answer;
    }

하.. 이차원 배열 자체가 [i, j, k] 라는 형식으로 들어오는 것이였음
나는 K번째 라길래 [i][j] = k 인줄 알고 로직을 구현하고 있었는데...
문제에 대한 이해도를 높이는게 더 필요해보임

이 문제의 핵심은 오히려 정렬이 아닌 Arrays.copyOfRange() 였던듯

0개의 댓글