프로그래머스: K번째수

최창효·2022년 2월 5일
0
post-thumbnail

문제 설명

  • array를 i번째부터 j번째까지 자릅니다.
  • 잘려나온 배열을 정렬합니다.
  • 정렬된 배열의 k번째 값을 구합니다.

접근법

  • 배열을 그대로 사용할 수도 있고 List로 변환해 사용할 수도 있습니다.
  • List를 활용하면 subList,sort등 적절한 메서드를 사용할 수 있어 훨씬 간편햐 집니다.

정답

import java.util.*;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
	int[] answer = new int[commands.length]; // 정답을 담을 array입니다.
	int cnt = 0; //answer의 index를 의미합니다
	for (int[] comm : commands) { 			
		int i = comm[0];
		int j = comm[1];
		int k = comm[2];      
		int[] new_arr = new int[j-i+1]; // i부터j까지는 총 j-i+1개의 공간이 필요합니다
		int idx = 0;//new_arr의 index를 의미합니다     
            
            	for (int l = i-1; l < j; l++) { // i번째부터 j번째 까지의 값을 차례대로 new_arr에 담습니다.
				new_arr[idx++] = array[l]; 
		}
		Arrays.sort(new_arr); // i번째부터 j번째 값만 담긴 array를 정렬합니다.
			
		int a_answer = 0;//이번 커맨드의 최종 정답이 담깁니다.
		for (int l = 0; l < new_arr.length; l++) { 
			if (l == k-1) {//k번째 순서가 되면
				a_answer = new_arr[l]; // 해당 값을 저장해 둡니다.
			}
		}
		answer[cnt++] = a_answer; // k번째 값(a_answer)을 answer에 담습니다.            
          
		/* List로 풀기            
            //배열 array를 List로 변환합니다
		List<Integer> lst = new ArrayList();
		for (int l = 0; l < array.length; l++) {
			lst.add(array[l]);
		}			
            
		lst = lst.subList(i-1,j); //subList로 slicing
		lst.sort(Comparator.naturalOrder());//sort로 정렬
		answer[cnt++] = lst.get(k-1);// 정답 저장
		*/
		}
	return answer;
    }
}
profile
기록하고 정리하는 걸 좋아하는 백엔드 개발자입니다.

0개의 댓글