문제 (프로그래머스 181943 : 수열과 구간 쿼리 2)
181943 : 수열과 구간 쿼리 2
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
// 답변 받을 리스트 선언
List<Integer> answer = new ArrayList<>();
// 변수 지정
int num = queries.length;
// query 하나씩 순회
for(int j = 0 ; j < num ; j++){
int s = queries[j][0];
int e = queries[j][1];
int k = queries[j][2];
// min 초기화
int min = 1000000;
// i 찾기 (k보다 크면서 e보다 작거나 같음)
for(int l = s ; l <= e ; l++){
// arr[i] 중 가장 작은 값을 찾기
if(arr[l] > k){
if(arr[l] < min){
min = arr[l];
}
}
}
// 언제 추가해야하지? >> for문 하나 끝나면 min 추가
// List라 배열에 바로 추가할수없음
if(min == 1000000){
answer.add(-1);
}else{
answer.add(min);
}
}
// List > int형 배열
int[] answerB = new int[answer.size()];
for(int i = 0; i < answer.size(); i++){
answerB[i] = answer.get(i).intValue();
}
return answerB;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int idx = 0;
int[] answer = new int[queries.length];
for (int[] query : queries) {
int s = query[0], e = query[1], k = query[2];
int min = Integer.MAX_VALUE;
for (int i = s;i <= e;i++)
if (arr[i] > k)
min = Math.min(arr[i], min);
answer[idx++] = min == Integer.MAX_VALUE ? -1 : min;
}
return answer;
}
}
[출처] https://school.programmers.co.kr/learn/courses/30/lessons/181923/solution_groups?language=java - Hyeona님 코드
! 배울점
infinity
를 반환 ⇒ 알아두면 유용할듯!