K번째 수

김나영·2023년 6월 20일
0

프로그래머스

목록 보기
24/39

문제 : K번째수

풀이

int[] answer = new int[commands.length];
  • commands의 길이만큼 선택해야하므로 크기를 commands의 길이로 선언
for (int i = 0; i < commands.length; i++) {}
  • commands만큼 순회
int start = commands[i][0]; // 시작 위치
int end = commands[i][1]; // 끝 위치
int select = commands[i][2]; // 선택할 위치
int[] split = Arrays.copyOfRange(array, start-1, end); // 원본 배열,복사할 시작인덱스. 복사랄 끝 인덱스
  • 시작 위치, 끝 위치, 선택할 위치를 지정

  • 배열은 0부터 시작

  • [i, j k]에서 시작 위치 i => 0번째(첫 번째 자리)

  • j => 1번째(두 번째 자리)

  • k => 2번째(세 번째 자리)

  • copyOfRange() 메서드를 사용하여 범위만큼 자른 배열을 split 배열에 복사

  • Arrays.copyOfRange(복사할 배열, 시작 지점(포함), 끝 지점(불포함))

  • 시작 지점에서 -1을 하는 이유는

    • 문제에서 2번째에서 5번째까지 숫자라고 하면 {1, 2, 3, 4, 5}에서 2, 3, 4, 5를 의미하는데 2, 3, 4, 5는 배열의 인덱스 상 1, 2, 3, 4이므로 -1을 해줌
  • 끝 지점은 포함되지 않으므로 -1을 하지 않아도 됨

 Arrays.sort(split);
  • Arrays.sort()로 split의 배열을 정렬해줌
answer[i] = split[select-1];
  • select할 숫자는 select-1번 인덱스에 존재

전체 코드

import java.util.Arrays;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        // i~j까지 자른 후 Arrays.sort -> array[k] 찾기
        // 2~5 => 2,3,4,5
        for (int i = 0; i < commands.length; i++) {
            int start = commands[i][0]; // 시작위치
            int end = commands[i][1]; // 끝 위치
            int select = commands[i][2]; // 선택할 위치
            int[] split = Arrays.copyOfRange(array, start-1, end); // 원본 배열,복사할 시작인덱스. 복사랄 끝 인덱스
            Arrays.sort(split);
            answer[i] = split[select-1];
        }
        return answer;
    }
}

0개의 댓글