본문 바로가기

알고리즘 공부/백준

17299 오등큰수 with C++

문제

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