https://www.acmicpc.net/problem/17299
* 풀이
- 오큰수의 유사문제
- stack을 이용해서 오큰수를 찾은 애들을 지워버린다. => 시간복잡도를 줄임
- F[cur]이 F[top]보다 더큰경우 -> cur이 오큰수임, 기록, pop, 반복
- push(cur)
- 남아있는 애들은 오큰수가 없는애임 -> -1 기록
* 전체코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
vector<ll> arr;
stack<pair<ll,ll>> s;
ll F[1000000+4],ans[1000000+4];
ll ret;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n ;
for (int i = 0; i < n; ++i) {
ll tmp;
cin >> tmp;
F[tmp]++;
arr.push_back(tmp);
}
s.push({0,arr[0]});
for (int i = 1; i < n; ++i) {
while(s.size() && F[s.top().second] < F[arr[i]]) {
ans[s.top().first] = arr[i];
s.pop();
}
s.push({i, arr[i]});
}
while(s.size()) {
ans[s.top().first] = -1;
s.pop();
}
for(int i=0; i <n; ++i) {
cout<< ans[i]<<" ";
}
return 0;
}
'Algorithm > 스택' 카테고리의 다른 글
[알고리즘] 백준 1725 히스토그램 // 스택 (0) | 2024.12.29 |
---|---|
[알고리즘] 백준 6198 옥상정원꾸미기 // 스택, 역발상, 자기중심적 사고, st.size() 도 의미가 있다. (0) | 2024.12.29 |
[알고리즘] 백준 17298 오큰수 // 스택으로 탐색대상 줄이기 (0) | 2024.12.28 |
프로그래머스 크레인인형뽑기 게임 c++ // stack, 구현 (0) | 2023.11.14 |
백준 2504 c++ // 스택응용 (0) | 2023.09.01 |