개요
- 배열 array의 i번째 숫자부터 j번째 숫자까지 정렬했을 때, k번째에 있는 수를 구하라
<조건>
- 알 수 없음
<입력>
- int[] array: 숫자를 원소로 가지는 배열
- 길이: 1 ~ 100, 10^2
- 각 원소의 값: 1 ~ 100, 10^2
- int[][] commands: [i,j,k]를 원소로 가진 2차원 배열
- 길이: 1 ~ 50, 10^1
<반환>
- commands의 모든 원소에 대해 연산을 적용했을 때 나온 결과를 배열에 담아 return하라.
문제 풀이
단순히 Array를 i부터 j까지 자른 뒤에, 정렬하고, k번째 위치를 구하면 되는 문제였습니다.
이때 주의할 점은 문제는 인덱스를 1부터 시작한다는 겁니다.
핵심 메서드는 다음과 같습니다.
int[] arr = Arrays.copyOfRange(array, front, end);
Arrays.sort(arr);
Arrays.copyOfRange(original, int from, int to)는
from부터 to전까지 배열을 복사합니다.
보시다시피 다양한 자료형에 오버로딩이 되어있어 자료형에 상관없이 사용 가능합니다.
Arrays.sort()는 기본은 오름차순 정렬을 진행하고,
Comparator를 인자로 넣으면 정렬 기준을 변경 가능합니다.
특정 범위만 정렬하는 것도 물론 가능합니다.
전체 코드
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
List<Integer> list = new ArrayList<>();
for(int[] command: commands){
int front = command[0]-1;
int end = command[1];
int pos = command[2]-1;
int[] arr = Arrays.copyOfRange(array, front, end);
Arrays.sort(arr);
list.add(arr[pos]);
}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
배운 점
java.util.Arrays의 메서드
copyOfRange()와 sort()에 대해 배울 수 있는 문제였습니다.
Reference
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html
'Problem Solving > [Java] Programmers' 카테고리의 다른 글
[Java] 프로그래머스: 디스크 컨트롤러 (0) | 2025.01.18 |
---|---|
[Java] 프로그래머스: 가장 큰 수 (0) | 2025.01.18 |
[Java] 프로그래머스: 전화번호 목록 (0) | 2025.01.12 |
[Java] 프로그래머스: 완주하지 못한 선수 (0) | 2025.01.12 |
[Java] 프로그래머스: 폰켓몬 (0) | 2025.01.12 |