본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / K번 째 수 / JAVA / 정렬] * Arrays.copyOfRange()

by KDW999 2023. 3. 10.

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 접근

배열은 0번 인덱스부터 시작하는 개념이라 처음엔 혼동이 오나 i, j, k의 값들을 2차원 배열에 사용하고, 잘라낸 배열 cutArray에 값을 넣어주면 쉽게 풀린다.

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for(int i=0; i<commands.length; i++) {
        	
        	int count = 0;
        	int[] cutArray = new int[commands[i][1]-commands[i][0]+1];
        	
        	for(int j=commands[i][0]-1; j<commands[i][1]; j++) cutArray[count++] = array[j];
        	
        	Arrays.sort(cutArray);
        	answer[i] = cutArray[commands[i][2]-1];
        	
        }
        return answer;
    }
}

 

다른 사람 풀이

다른 사람 풀이를 보니 배열을 잘라주는 기능이 있더라

Arrays.copyOf(원본 배열, 복사할 길이);
Arrays.copyOfRange(원본 배열, 복사 시작 인덱스, 복사 끝 인덱스); → (a, 0, 3)이면 a의 0번 인덱스 부터 2번 인덱스까지 자름

import java.util.*;

class Solution {
	    public int[] solution(int[] array, int[][] commands) {
	        int[] answer = new int[commands.length];

	        // Arrays.copyOf(원본 배열, 복사할 길이);
	        // Arrays.copyOfRange(원본 배열, 복사 시작 인덱스, 복사 끝 인덱스); → (a, 0, 3)이면 a의 0번 인덱스 부터 2번 인덱스까지 자름
	        for(int i=0; i<commands.length; i++){
	            int[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]); // 잘라낸 배열, commands[i][1]은 앞까지 자르기에 -1 안해줌
	            Arrays.sort(temp);
	            answer[i] = temp[commands[i][2]-1];
	        }

	        return answer;
	    }
}

댓글