https://www.acmicpc.net/problem/17298

이 문제에서 구해야하는 건
1. 자신보다 뒤에 입력
2. but 자신보다 큼
3. 그중에 가장 빨리 입력된 수
배열로 받아서 뺑글뺑글 돌면서 확인해볼 수도 있지만 이중포문으로 시간복잡도가 n^2이 된다..
이때 사용할 수 있는건 stack
#include <iostream>
#include <stack>
using namespace std;
long long n;
stack<long long> s;
long long a[1000001];
long long nge[1000001];
int main()
{
cin >> n;
for (long long i = 0; i < n; i++)
{
cin >> a[i];
}
for (long long i = 0; i < n; i++)
{
// 0~i-1 와 i번째 인덱스 수를 비교해서 오큰수 갱신
while (!s.empty() && a[s.top()] < a[i])
{
nge[s.top()] = a[i];
s.pop();
}
// i번째
s.push(i);
}
// 오큰수 없는 거 -1 처리
while (!s.empty())
{
nge[s.top()] = -1;
s.pop();
}
for (int i = 0; i < n; i++)
{
cout << nge[i] << " ";
}
}'알고리즘 > KOALA 알고리즘 스터디' 카테고리의 다른 글
| [BOJ/C++] 1427 소트인사이드 (0) | 2025.05.15 |
|---|---|
| [BOJ/C++] 28279번 덱 2 (0) | 2025.05.11 |
| [BOJ/C++] 12847번 꿀 아르바이트 (0) | 2025.04.13 |
| [BOJ/C++] 2230번 수 고르기 (0) | 2025.04.03 |
| [BOJ/C++] 11057번 오르막수 (0) | 2025.03.28 |