Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 자료구조
- Median of Medians
- 프로그래밍언어
- 삽입정렬
- 기수정렬
- 수학
- 힙정렬
- 자바
- 다이나믹프로그래밍
- SNS
- 재귀
- 퀵정렬
- 백준
- 동적계획법
- 선택알고리즘
- 동적프로그래밍
- 계수정렬
- 알고리즘
- java
- 프로그래밍
- 코딩테스트
- 선택정렬
- DP
- 백트래킹
- 안드로이드
- 버블정렬
- C++
- 병합정렬
- 정수론
- 정렬
Archives
- Today
- Total
MODE::CREATIVE
[백준][c++] 11003번: 최솟값 찾기 본문

문제 해석
각 슬라이딩 윈도우 크기 내에서 최소값을 출력하는 문제입니다.
풀이
벡터와 덱을 이용해 해결했습니다.
- 각 D(i)에 대해 다음을 반복합니다.
- 현재 추가되는 A(i)와 dq.back(덱에서 가장 큰 수)를 비교하여 A(i)가 더 작다면 dq.back을 pop함
- A(i)를 인덱스와 함께 back에 추가
- dq.front가 윈도우 크기를 벗어났다면 pop함
- dq.front를 출력
코드
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main() {
//입출력 최적화
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//입력부
int n,l;
cin >> n >> l;
vector<int> a(n);
for(int i=0;i<n;i++){
cin >> a[i];
}
//해결부
deque<pair<int, int>> dq; // {data, index}
for(int i=0;i<n;i++){
while (!dq.empty() && dq.back().first > a[i])
dq.pop_back();
dq.push_back({a[i],i});
while (!dq.empty() && dq.front().second <= i-l)
dq.pop_front();
cout << dq.front().first<<' ';
}
return 0;
}'BOJ' 카테고리의 다른 글
| [백준][c++] 15652번: N과 M (4) (0) | 2024.09.08 |
|---|---|
| [백준][JAVA] 1305번: 광고 (0) | 2024.06.17 |
| [백준][c++] 2206번: 벽 부수고 이동하기 (0) | 2024.02.19 |
| [백준][c++] 12738번: 가장 긴 증가하는 부분 수열 3 (0) | 2024.01.10 |
| [백준][c++] 1918번: 후위표기식 (0) | 2024.01.08 |