문제 링크 : https://www.acmicpc.net/problem/17299
풀이
스택 문제입니다!
17298번 오큰수 문제랑 거의 비슷한 문제입니다.
17298번 오큰수 문제 참조 : https://suhwanc.tistory.com/58
다른 점은 미리 원소의 개수를 카운트 한다는 점인데,
이 카운트를 이용해 고대로~ stack 작업할 때 써먹으면 된다!
소스 코드
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
31
32
33
34
35
36
37
38
39
|
#include <iostream>
#include <stack>
#include <algorithm>
#include <vector>
using namespace std;
int f[1000001];
int main()
{
int n; scanf("%d", &n);
vector<int> a(n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
f[a[i]]++; //개수 카운트
}
vector<int> ans(n);
stack<int> s;
s.push(0); //처음 idx 저장
for (int i = 1; i < n; i++) {
if (s.empty()) s.push(i);
while (!s.empty() && f[a[s.top()]] < f[a[i]]) { //오등큰수 발견 시
ans[s.top()] = a[i];
s.pop();
}
s.push(i);
}
while (!s.empty()) {
ans[s.top()] = -1;
s.pop();
}
for (int i = 0; i < n; i++) {
printf("%d ", ans[i]);
}
return 0;
}
|
cs |
개발환경 : Visual Studio 2019
지적, 조언 언제든지 환영입니다~~
'백준 문제풀이' 카테고리의 다른 글
백준 1309번 동물원 (0) | 2020.01.16 |
---|---|
백준 17087 숨바꼭질 6 (0) | 2020.01.16 |
백준 17298번 오큰수 (0) | 2020.01.16 |
백준 16194번 카드 구매하기 2 (0) | 2020.01.14 |
백준 17425번 약수의 합 (2) | 2020.01.14 |