[JAVA/프로그래머스] 정렬_K번째수

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/42748

👊 첫 번째 도전

1. 설계

  1. commands를 순회하면서 새로 만들 배열의 길이, 범위를 확인한다.
  2. 새로 만든 배열 cutArray에 값을 넣고 sort한다.
  3. 특정 인덱스를 리턴한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = {};
        answer=new int[commands.length];
        int[] cutArray;
        int start,end,idx=0;
        for(int i=0;i<commands.length;i++){
            start=commands[i][0];
            end=commands[i][1];
            cutArray=new int[end-start+1];
            for(int j=start;j<=end;j++){//새 배열 생성
                cutArray[idx]=j;
                idx++;
            }
            answer[i]=cutArray[commands[i][2]];
            idx=0;
        }
        return answer;
    }
}

3. 결과

실행결과 실패. 배열이 인덱스 범위를 초과했다.

4. 문제점

문제에서 배열을 1부터 세기 때문에 start와 end에서 1씩 빼줘야한다. 두 번째 for문 범위도 이상하고, j가 아닌 array의 값을 넣어야한다. 배열 정렬도 하지 않았다.

👊 두 번째 도전

1. 설계

  1. 새 배열을 생성한 후 sort한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Arrays;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = {};
        answer=new int[commands.length];
        int[] cutArray;
        int start,end;
        for(int i=0;i<commands.length;i++){
            start=commands[i][0]-1;
            end=commands[i][1]-1;
            cutArray=new int[end-start+1];
            for(int j=0;j<cutArray.length;j++){//새 배열 생성
                cutArray[j]=array[start];
                start++;
            }
            Arrays.sort(cutArray);
            answer[i]=cutArray[commands[i][2]-1];
        }
        return answer;
    }
}
  • int[] cutArray: 조건에 맞게 자른 배열이다. 배열 크기는 변하기 때문에 크기 선언은 for문안에서 한다.
  • int start: array의 i번째 인덱스를 저장한다.
  • int end: j번째 인덱스를 저장한다. start와 end는 배열을 1부터 세기 때문에 1씩 빼서 0부터 시작하도록 한다.

3. 결과

실행결과 🤟 성공 🤟

👏 해결 완료!

쉬운 문제였지만 잔실수가 많았다. 인덱스 번호를 틀린다거나, 정렬을 하지 않았다거나. 이런 실수를 줄일 수 있도록 코드를 바로 작성하기전에 어떻게 구상할지 머릿속으로 정리를 하는 단계를 습관화해야겠다.