본문 바로가기
Algorithm/BAEKJOON

[백준/C++] 오등큰수

by code_pie 2024. 4. 10.
 
 

 

#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;

int mm[1000000];
int number[1000000];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	vector<int> ans(n, -1);
	stack<pair<int, int>> st;
	pair<int, int> np; //value, index
	//unordered_map<int,int> mm;
	for (int i = 0; i < n; i++)
	{
		cin >> number[i];
		mm[number[i]] += 1;
	}
	int a;
	for (int i = 0; i < n; i++) 
	{
		a = number[i];
		if (st.empty())
		{
			st.push(make_pair(a, i));
		}
		else
		{
			np = st.top();
			while (mm[a] > mm[np.first])
			{
				st.pop();
				ans[np.second] = a;
				if (st.empty())
				{
					break;
				}
				np = st.top();

			}
			st.push(make_pair(a, i));
		}
	}

	for (int i = 0; i < n; i++)
	{
		cout << ans[i] << " ";
	}

	return 0;
}

 


처음에 map을 썼더니 시간 초과가 났다. 아무래도 map은 정렬을 하는 과정이 있기 때문에 시간 초과가 난 것 같다.

그래서 unordered_map을 사용했더니 문제가 풀렸다.

또 unordered_map과 vector 대신 크기가 정해진 array를 사용했더니 속도가 더 빨라졌다.

은근 속도 차이가 많이 나네...

 

17299번: 오등큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

 

반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[백준/C++] 숨바꼭질  (0) 2024.04.12
[백준/C++] 오아시스 재결합  (0) 2024.04.11
[백준/C++] 오큰수  (0) 2024.04.09
[백준/C++] 문자열 폭발  (1) 2024.04.08
[백준/C++] 앱  (0) 2024.04.07