문제
정수 배열
arr
와 2차원 정수 배열 queries
이 주어집니다. queries
의 원소는 각각 하나의 query
를 나타내며, [s, e, k]
꼴입니다.각
query
마다 순서대로 s
≤ i
≤ e
인 모든 i
에 대해 k
보다 크면서 가장 작은 arr[i]
를 찾습니다.각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
제한사항
- 1 ≤
arr
의 길이 ≤ 1,000 - 0 ≤
arr
의 원소 ≤ 1,000,000
- 1 ≤
queries
의 길이 ≤ 1,000 - 0 ≤
s
≤e
<arr
의 길이 - 0 ≤
k
≤ 1,000,000
예시

풀이
해당 문제는
queries
의 인덱스의 크기의 역할이 정해져 있기 때문에 우선 적으로 그 역할에 맞게 변수를 선언해주었다.
1번index
는 arr
를 탐색 할 시작 지점start
이고,
2번index
는 arr
를 탐색 할 마지막 지점end
이다.
그리고 3번index
는 해당 숫자보다 큰 값 중 가장 작은 값을 고르는 기준num
이 된다.min
조건에 맞는 값 중에 가장 작은 값을 저장할 변수 이다. 처음 값을 문제에 제한 상항에 맞춰서 설정 해주었다.
found
는 기본을 false
로 지정해주고 if문을 통과하면 ture
로 변경이되고, 그 아래 로직에서 if문
을 거치지 않았으면 false
이기 때문에 false
이면 num
보다는 무조건 작은 값이기 때문에 조건에 맞게 -1
이 배열에 저장 되도록 하였다.arr
를 queries
의 조건으로 모두 조회를 해야하기 때문에 for문
을 사용하여 위에서 지정해준 변수를 이용하여 모든 조건을 조회 하였다.public class ex24 {
public static void main(String[] args) {
int[] arr = {0, 1, 2, 4, 3};
int[][] queries = {{0, 4, 2}, {0, 3, 2}, {0, 2, 2}};
int[] answer = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int start = queries[i][0];
int end = queries[i][1];
int num = queries[i][2];
int min = 1000001;
boolean found = false;
for (int j = start; j <= end; j++) {
if (num < arr[j] && arr[j] < min) {
min = arr[j];
found = true;
}
}
if (found) {
answer[i] = min;
} else {
answer[i] = -1;
}
}
}
}
Share article