본문 바로가기
개발로그/알고리즘

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

by 쩜징 2023. 7. 28.

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


정수 배열 arr와 2차원 정수 배열 queries가 주어진다.

queries의 원소는 각각 하나의 query를 나타내며 [s, e, k] 꼴이다.

query마다 순서대로 모든 i에 대해 

k보다 크면서 가장 작은 arr[i]를 찾는다.

각 쿼리 순서에 맞게 답을 저장한 배열을 return하라.

 

특정 쿼리의 답이 존재하지 않으면 -1을 저장한다.

 

arr queries result
[0, 1, 2, 4, 3] [[0, 4, 2], [0, 3, 2], [0, 2, 2]] [3, 4, -1]

** 풀이 방법

 

1. queries의 행에 접근하는 반복문과

하위에 queries[i][2]보다 큰 숫자들을

담기 위해 ArrayList를 생성한다.

 

2. 행이 넘어가기 전에

list 원소 개수를 체크해서 

0일 때, 1일 때, 2이상일 때의조건을 지정해서 answer에 저장한다.

 

for (int i=0; i<queries.length; i++) {
    List<Integer> list = new ArrayList<>(); //i가 바뀔때마다 새로 생성
    
    for (int j=queries[i][0]; j<=queries[i][1]; j++) {
        //queries[i][2]보다 큰 숫자들을 list에 저장한다.
        if (arr[j] > queries[i][2]) {
            list.add(arr[j]);
        }
    }
    //list.size()가 0이면 answer에 -1을 저장한다.
    if (list.size()==0) answer.add(-1);
    //list.size()가 2이상이면 list에 저장된 원소의 최소값을 저장한다.
    else if (list.size()>1) {
        int min = list.get(0);
        for (int k=1; k<list.size(); k++) {
            if (list.get(k)<min)
                min = list.get(k);
        } 
        answer.add(min);
    } 
    //list.size()가 1이면 첫번째 원소를 answer에 저장한다.
    else answer.add(list.get(0));
}

 

<> 전체 코드 </>

import java.util.*;
class Solution {
    public List<Integer> solution(int[] arr, int[][] queries) {
        
        List<Integer> answer = new ArrayList<>();
        for (int i=0; i<queries.length; i++) {
            List<Integer> list = new ArrayList<>();
            for (int j=queries[i][0]; j<=queries[i][1]; j++) {
                if (arr[j] > queries[i][2]) {
                    list.add(arr[j]);
                }
            }
            if (list.size()==0) answer.add(-1);
            else if (list.size()>1) {
                int min = list.get(0);
                for (int k=1; k<list.size(); k++) {
                    if (list.get(k)<min)
                        min = list.get(k);
                } 
                answer.add(min);
            } else answer.add(list.get(0));
        }
        return answer;
    }
}

 

반응형

댓글