https://www.acmicpc.net/problem/17299
17299번: 오등큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
전에 풀었던 17298 오큰수랑 비슷한 문제이다.
이것도 큰수중에서 가장 왼쪽에 있는 수를 출력해야 하므로 stack을 사용하였다.
#include <iostream>
#include <stack>
using namespace std;
int a[1000001] = { 0, };
int f[1000001] = { 0, };
int ans[1000001] = { 0, };
stack<int> s;
int main() {
int n;
cin >> n;
for (int i = 0;i < n;i++) {
cin >> a[i];
f[a[i]]++;
}
for (int i = n - 1;i >= 0;i--) {
while (!s.empty() && f[s.top()] <= f[a[i]]) {
s.pop();
}
if (s.empty()) {
ans[i] = -1;
}
else {
ans[i] = s.top();
}
s.push(a[i]);
}
for (int i = 0;i < n;i++) {
cout << ans[i] << ' ';
}
return 0;
}
간단하게 int f 배열 추가해주고 대소비교를 f[i]로 하게끔 바꾸어서 문제를 풀었다.
'코딩테스트 > C++' 카테고리의 다른 글
| [백준 C++] 2609번: 최대공약수와 최소공배수 (0) | 2024.04.12 |
|---|---|
| [백준 C++] 10430번: 나머지 (0) | 2024.04.12 |
| [백준 C++] 17298번: 오큰수 (0) | 2024.04.12 |
| [백준 C++] 10799번: 쇠막대기 (0) | 2024.04.12 |
| [백준 C++] 17413번: 단어 뒤집기 2 (0) | 2024.04.12 |