프로그래머스/0단계

수열과 구간 쿼리 2

긴가우딘 2025. 1. 13. 16:10

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

 query마다 순서대로 s  i  e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

 


 

문제 읽으면서 생각 정리

  1. 일단 foreach로 하나씩 뽑아내기를 생각했으나 되지 않아 for문으로 변경
  2. s<=i<=e로 for문을 한번 더 돌린다
  3. if문으로 arr[i]가 k보다 크면서 가장 작은 수 찾아내어 answer에 집어넣는다 - Integer.MAX_VALUE이용
  4. min이 없으면 -1을 넣는다 - 삼항 연산자 이용

 

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        
        for(int q=0; q<queries.length; q++) {
            int s = queries[q][0];
            int e = queries[q][1];
            int k = queries[q][2];
            int min = Integer.MAX_VALUE;
            
            for(int i=s; i<=e; i++) {
                if(arr[i]>k && arr[i] < min) {
                    min = arr[i];
                }
                
                answer[q] = (min == Integer.MAX_VALUE) ? -1 : min;
            }
        }
        
        return answer;
    }
}