프로그래머스

[코딩테스트 연습] 수열과 구간쿼리2 - Lv.0

yujin0517 2023. 5. 6. 20:49

수열과 구간쿼리 2

 

<코드>

import java.util.Arrays;

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

 

<문제풀이>

answer 배열의 값을 모두 -1로 초기화했다.

queries의 값을 가져와 s~e 범위에서 k보다 큰 값의 arr 배열의 요소를 찾는다. (이중  for문 안의 조건문)

삼항 연산자를 사용하여 return 할 answer 배열의 요소를 찾는다. 

만약 answer [i]의 값이 -1이면 아직 탐색을 시작하지 않았다는 의미 이므로 arr [j] 값을 그대로 넣어준다. 

이후에 answer [i]의 값이 -1이 아니면 k 보다 큰 수중에 가장 작은 값을 찾기 위해 Math.min() 메서드를 사용하여 최솟값을 찾는다. 

이때, s~e 범위에서 k보다 큰 값이 없을 경우 -1이 그대로 남게 된다.