[프로그래머스 / C++] 수열과 구간 쿼리 2

YH·2023년 12월 4일
0

문제

수열과 구간 쿼리 2 : 문제 링크


문제 분석

  • 정수 배열 arr와 2차원 정수 배열 queries이 주어진다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴이다. 각 query마다 순서대로 s <= i <= e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾는다. 각 쿼리의 순서에 맞게 답을 저장한 배열을 return(단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장한다.)
  • 쿼리의 순서에 맞게 답을 저장할 정수형 배열 answer과 특정 쿼리에 답이 존재함을 구분할 정수형 변수 check, 가장 작은 수를 저장할 min을 초기화. for loop를 통해 queries의 첫번째부터 마지막 원소까지 순환하고, check는 0, min은 1,000,001로 초기화(k의 최대값은 1,000,000이므로). 또 다른 for loop를 통해 각 qeury의 s(queries[i][0])부터 e(queries[i][1])까지 순환하여, if문을 통해 k(queries[i][2])보다 크고 min보다 작을 경우, min에 해당 원소값을, check에 1을 저장. loop 탈출 후, if ~ else문을 통해 check가 1이면 답이 있음을 의미하므로 min을, 0이면 답이 없음을 의미하므로 -1을 answer에 저장. 이 과정을 반복한 후, 최종적으로 저장된 answer을 return

풀이

#include <vector>

using namespace std;

vector<int> solution(vector<int> arr, vector<vector<int>> queries) {
    vector<int> answer;
    int check, min;
    
    for(int i = 0; i < queries.size(); ++i) {
        check = 0, min = 1000001;
        for(int j = queries[i][0]; j <= queries[i][1]; ++j) {
            if(queries[i][2] < arr[j] && arr[j] < min) {
                min = arr[j];
                check = 1;
            }
        }
        if(check == 1) answer.push_back(min);
        else answer.push_back(-1);
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글