문제 설명
자연수가 들어있는 배열에서 숫자 K개를 선택하려 합니다. 이때, 선택한 숫자 중 가장 큰 수와 가장 작은 수의 차이가 최소가 되도록 해야합니다.
예를 들어 배열에 들어있는 숫자가 [9, 11, 9, 6, 4, 19] 이고, K = 4 라면
- 숫자 4개를 [9, 11, 9, 6]로 뽑으면 (가장 큰 수 - 가장 작은 수) = (11 - 6) = 5가 됩니다.
- [9, 9, 6, 4] 와 같이 숫자를 뽑아도 (가장 큰 수 - 가장 작은 수) = (9 - 4) = 5가 됩니다.
그러나 가장 큰 수와 가장 작은 수의 차이가 5보다 작아지도록 숫자 4개를 선택하는 방법은 없습니다.
자연수가 들어있는 배열 arr, 선택해야 하는 숫자 개수 K가 매개변수로 주어질 때, 선택한 숫자중 가장 큰 수와 가장 작은 수의 차이가 최소가 되록 arr에서 숫자 K개를 선택했을 때, 그때의 가장 큰 수와 가장 작은 수의 차이를 return 하도록 solution 메소드를 완성해주세요.
매개변수 설명
자연수가 들어있는 배열 arr, 선택해야 하는 숫자 개수 K가 solution 메소드의 매개변수로 주어집니다.
- arr 배열의 길이는 5 이상 1,000 이하입니다.
- arr의 원소는 1 이상 10,000 이하인 자연수입니다.
- K 는 4 이상 50 이하인 자연수입니다.
return 값 설명
선택한 숫자중 가장 큰 수와 가장 작은 수의 차이가 최소가 되도록 arr에서 숫자 K개를 선택했을 때, 그때의 가장 큰 수와 가장 작은 수의 차이를 return 해주세요.
예제
arr | K | return |
[9, 11, 9, 6, 4, 19] | 4 | 5 |
예제 설명
예제 #1
문제의 예제와 같습니다.
문제 풀이
1. 입력받은 배열을 정렬한다.
2. 정렬된 배열에서 K개씩 뽑아서 가장 큰 수 - 작은 수의 차이를
3. 현재 answer와 비교해서 작은 수를 answer에 담아준다.
4. 이를 for 문을 통해 계속 비교해준다.
// 다음과 같이 import를 사용할 수 있습니다.
import java.util.*;
class Solution {
public int solution(int[] arr, int K) {
// 여기에 코드를 작성해주세요.
Arrays.sort(arr);
int answer = arr[arr.length-1];
for(int i = 0 ; i < arr.length-K+1 ; i++){
answer = Math.min(answer,arr[i+K-1]-arr[i]);
}
return answer;
}
// 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
public static void main(String[] args) {
Solution sol = new Solution();
int[] arr = {9, 11, 9, 6, 4, 19};
int K = 4;
int ret = sol.solution(arr, K);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret + "입니다.");
}
}
'Algorithm > COS Pro 1급 JAVA' 카테고리의 다른 글
[COS Pro 1급 JAVA 모의고사] 카드셔플(한 줄 바꾸기) (0) | 2022.10.15 |
---|---|
[COS Pro 1급 JAVA 모의고사] 보드게임(한 줄 바꾸기) (0) | 2022.10.14 |
[COS Pro 1급 JAVA 모의고사] 종이접기(한 줄 바꾸기) (1) | 2022.10.13 |
[COS Pro 1급 JAVA 모의고사] 아르바이트, 판매사원(빈칸 채우기) (0) | 2022.10.12 |
[COS Pro 1급 JAVA 모의고사] Up and down(빈칸 채우기) (0) | 2022.10.10 |