[작성일: 2023. 10. 08]
풀이
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
Arrays.fill(answer, Integer.MAX_VALUE);
for (int i = 0; i < queries.length; i++) {
for (int j = queries[i][0]; j <= queries[i][1]; j++) {
if (arr[j] > queries[i][2]) {
if (answer[i] > arr[j]) {
answer[i] = Math.min(arr[j], answer[i]);
}
}
}
if (answer[i] == Integer.MAX_VALUE) {
answer[i] = -1;
}
}
return answer;
}
}
우선 답을 출력할 answer 배열은 Integer.MAX_VALUE로 채워둔다.
그 다음 queries 2차원 배열을 살펴보면
0, 4, 2
0, 3, 2
0, 2, 2
이렇게 되어있다. 구조는 queries[i][0], [i][1], [i][2]가 고정이기 때문에 첫 for문에서는 i를 위햇 queries의 길이만큼 반복문을 돌리고, 두번째 포문에서는 [i][0]부터 [i][2]까지 for문을 돌리면 된다.
arr 배열 0, 1, 2, 4, 3에서 j번째의 수가 queries[i][2]보다 크면 if문이 시작된다. (ex: arr[3]의 4는 queries[0][2]의 2보다 크다.
그 안에서 if문이 또 실행되는데 이건 최소값을 찾기 위한 코드이다.
현재 answer[i]에는 Integer.MAX_VALUE 값으로 채워져 있기 때문에 최초에는 무조건 arr[j]가 answer[i]보다 작기 때문에 answer[i]에 저장된다. 그 다음부터는 더 작은 수가 answer[i]에 저장된다.
조건에 만족하지 않아 answer[i]에 아직도 Integer.MAX_VALUE 값이 있다면 -1을 출력하면 된다.