import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 배열 크기
int m = Integer.parseInt(st.nextToken()); // k씨가 일한 횟수
// 배열 입력
int[] arr = new int[n + 1];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// k씨 일 진행
while (m-- > 0) {
// 인덱스 값 입력받고 0-index로 변환
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken()) - 1;
int j = Integer.parseInt(st.nextToken()) - 1;
int k = Integer.parseInt(st.nextToken()) - 1;
int[] newArr = Arrays.copyOfRange(arr, i, j + 1); // i부터 j까지 복사
Arrays.sort(newArr);
sb.append(newArr[k] + "\n");
}
System.out.println(sb);
}
}
1. 문제 요약
정리 정돈을 좋아하는 k씨가 주어진 배열의 특정 범위를 오름차순으로 정렬한 후, 해당 범위에서 k번째로 작은 숫자를 선택하는 작업을 여러 번 수행합니다. 입력으로 배열의 크기, k씨의 작업 횟수, 배열의 요소들, 그리고 각 작업의 범위와 k값이 주어집니다. 각 작업에 대해 k씨가 선택한 숫자를 출력합니다.
2. 핵심 아이디어
- 범위 추출 및 정렬:
- 배열의 특정 범위를 추출하여 오름차순으로 정렬합니다.
- 정렬된 배열에서 k번째 숫자를 선택합니다.
- 효율적인 배열 복사:
- Arrays.copyOfRange 메서드를 사용하여 배열의 특정 범위를 복사합니다.
- 인덱스 조정:
- 입력받은 인덱스를 0-index로 변환하여 사용합니다.
3. 참고 - Arrays 클래스의 주요 메서드
- Arrays.copyOfRange(T[ ] original, int from, int to):
- 지정된 범위의 원소를 포함하는 새로운 배열을 반환합니다.
- from은 포함되지만 to는 포함되지 않습니다.⭐
- Arrays.sort(T[ ] arr):
- 배열을 오름차순으로 정렬합니다.
- Arrays.toString(T[ ] arr):
- 배열의 내용을 문자열로 변환하여 반환합니다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 2565] 전깃줄 (0) | 2024.07.21 |
---|---|
[elice 알고리즘 코드 챌린지] Day 3 - 문자열 압축 해제 (0) | 2024.07.10 |
[elice 알고리즘 코드 챌린지] Day 1 - 목표량 (0) | 2024.07.09 |
[prog 81302] 거리두기 확인하기 (0) | 2024.07.09 |
[prog 17680] 캐시 (0) | 2024.07.08 |