문제
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의 개선한 방법을 적용한 방법으로 해결했습니다.
https://everydaystudy.tistory.com/47
#include <iostream>
#include <stack>
#define MAX 1000001
using namespace std;
int count_li[MAX];
int input_li[MAX];
int result[MAX];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++){
cin >> input_li[i];
count_li[input_li[i]]++;
}
stack<int> num_stack;
for (int i = n-1; i >= 0; i--){
while (!num_stack.empty() && count_li[num_stack.top()] <= count_li[input_li[i]])
num_stack.pop();
if (!num_stack.empty() && num_stack.top() != input_li[i])
result[i] = num_stack.top();
else
result[i] = -1;
num_stack.push(input_li[i]);
}
for (int i = 0; i < n; i++){
cout << result[i] << " ";
}
return 0;
}
'알고리즘 공부 > 백준' 카테고리의 다른 글
2609 최대공약수와 최소공배수 with C++ (0) | 2022.07.10 |
---|---|
10430 나머지 with C++ (0) | 2022.07.10 |
17298 오큰수 with C++ (0) | 2022.07.09 |
10799 쇠막대기 with C++ (0) | 2022.07.07 |
17413 단어 뒤집기 2 with C++ (0) | 2022.07.07 |