fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 11003 (C++) 최솟값 찾기
최초 업로드: 2025-05-01 08:11:00
최근 수정 시간: 2025-07-25 08:48:39
게시자: rlatjwls3333
카테고리: 백준
조회수: 11
# [Platinum V] 최솟값 찾기 [문제 링크](https://www.acmicpc.net/problem/11003) ## 문제 설명 <p>N개의 수 A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>N</sub>과 L이 주어진다.</p> <p>D<sub>i</sub> = A<sub>i-L+1</sub> ~ A<sub>i</sub> 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 A<sub>i</sub>는 무시하고 D를 구해야 한다.</p> ## 입력 <p>첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000)</p> <p>둘째 줄에는 N개의 수 A<sub>i</sub>가 주어진다. (-10<sup>9</sup> ≤ A<sub>i</sub> ≤ 10<sup>9</sup>)</p> ## 출력 <p>첫째 줄에 D<sub>i</sub>를 공백으로 구분하여 순서대로 출력한다.</p> ## 풀이 #### 우선순위 큐에 <값, 인덱스> 페어로 넣고 매번 최솟값을 뽑아내면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, l; cin >> n >> l; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for(int i=0;i<n;i++) { int A; cin >> A; pq.push({A, i}); while(pq.top().second<i-l+1) pq.pop(); cout << pq.top().first << ' '; } } ```