Suhwanc

문제 링크 : 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번 오큰수 문제랑 거의 비슷한 문제입니다.

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