will come true

[프로그래머스 / Level1] K번째 수 (Java) 본문

Algorithm

[프로그래머스 / Level1] K번째 수 (Java)

haehyun 2021. 11. 5. 23:35
728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/42748?language=java 

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

핵심 키워드

  • 정렬
  • Arrays 클래스
  • Arrays.copyOfRange()
  • Arrays.sort()

 

풀이

  1. 배열 i부터 j까지 자르기 (i부터 j까지 범위 복사)
  2. 배열 오름차순 정렬
  3. 배열에서 k번째 요소 추출

 

코드

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
            
        for(int i=0; i < commands.length; i++){
        	// 배열 i부터 j까지 자르기 (범위 복사)
		int[] arr = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
		// 오름차순 정렬
		Arrays.sort(arr);
		// k번째 수 찾기
		answer[i] = arr[commands[i][2] - 1];
        }
        
        return answer;
    }
}

 

  • i번째 부터 j번째까지 배열을 잘라야하는데, 배열의 index는 0부터 시작하기 때문에 예를들어 눈으로 봤을 때 1번째 부터 3번째까지 배열을 자르고 싶다면 실제로는 index 0부터 2까지 잘라야한다.
  • 추가로, 이때 Arrays.copyOfRange(int[] original, int from, int to) 메서드 지정된 범위의 끝 자리는 포함하지 않기 때문에 마지막 to값은 원하는 끝 자릿수+1을 해줘야 한다.
728x90
Comments