프로그래머스 수열과 구간 쿼리 2

KIMYEONGJUN·2026년 5월 17일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

solution 메서드는 쿼리 배열의 길이만큼 answer 배열을 만든다.
각 쿼리에 대해 s, e, k를 분리하여 [s, e] 범위 내의 arr 요소를 탐색한다.
k보다 큰 요소 중 가장 작은 값을 찾는데, 이를 위해 minVal을 Integer.MAX_VALUE로 초기화하고 조건문을 통해 값을 갱신한다.
조건을 만족하는 값이 없으면 found가 false인 상태로 남아 있으므로 -1을 answer에 저장한다.
모든 쿼리를 처리한 뒤 결과 배열을 반환한다.
main 메서드는 테스트용 데이터로 arr과 queries를 선언하고 solution을 호출한다.
결과 배열을 Arrays.toString(result)로 출력하여 [3, 4, -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 minVal = Integer.MAX_VALUE;
            boolean found = false;
            
            for (int i = s; i <= e; i++) {
                if (arr[i] > k && arr[i] < minVal) {
                    minVal = arr[i];
                    found = true;
                }
            }
            
            answer[q] = found ? minVal : -1;
        }
        
        return answer;
    }
}

프로그래머스 코드

package programmers;

import java.util.Arrays;

// 프로그래머스 수열과 구간 쿼리 2
public class Main22 {
    public static 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 minVal = Integer.MAX_VALUE;
            boolean found = false;

            for (int i = s; i <= e; i++) {
                if (arr[i] > k && arr[i] < minVal) {
                    minVal = arr[i];
                    found = true;
                }
            }

            answer[q] = found ? minVal : -1;
        }

        return answer;
    }

    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[] result = solution(arr, queries);

        // 배열을 [3, 4, -1] 같은 형태로 출력
        System.out.println(Arrays.toString(result));
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글