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 |
Tags
- 오퍼레이팅시스템
- 컴공과
- 코테
- 스택
- vector
- 문제풀이
- 정석
- Stack
- c++
- 정석학술정보관
- 알고리즘
- 자료구조
- bfs
- Computer science
- OS
- 개발
- 오에스
- Operating System
- 북리뷰
- 그래프
- 컴퓨터공학과
- coding
- DP
- 백준
- 코딩
- 컴공
- 브루트포스
- cs
- 너비우선탐색
- 구현
Archives
- Today
- Total
Little Jay
[C++] 백준 17298번 - 오큰수 본문
처음에는 이중 for문 즉, O(N^2)로 풀었는데 시간초과가 떠버렸다.
어떻게 이걸 O(N)으로 풀지, 그리고 어떻게 스택으로 풀지 고민하다가 결국
다른 분의 블로그를 참조했다.
원리는 생각보다 간단했다. stack에 저장하면서 stack에 있는 값이랑 비교하면서 큰 값 나올때까지 pop하기
답을 안보고 싶은데 진짜 1시간 동안 못풀면 계속 보게된다;;;;
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int N;
stack<int> s;
int ans[1000001];
int seq[1000001];
int main() {
cin >> N;
for (int i = 0; i < N; i++)
cin >> seq[i];
for (int i = N - 1; i >= 0; i--) {
while (!s.empty() && s.top() <= seq[i])
s.pop();
if (s.empty())
ans[i] = -1;
else
ans[i] = s.top();
s.push(seq[i]);
}
for (int i = 0; i < N; i++)
cout << ans[i] << " ";
}
'알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 7562번 - 나이트의 이동 (0) | 2021.11.15 |
---|---|
[C++] 백준 2178번 - 미로 탐색 (0) | 2021.11.12 |
[C++] 백준 15652번 - N과 M (4) (0) | 2021.11.06 |
[C++] 백준 15651번 - N과 M (3) (0) | 2021.11.06 |
[C++] 백준 15650번 - N과 M(2) (0) | 2021.11.06 |
Comments