C언어

백준 17299번 오등큰수 : 배열크기 중요하다..!!!

mcdn 2020. 8. 18. 15:29
반응형
#include <iostream>
#include <queue>
#include <stack>
using namespace std;

int inputarr[1000001];
int bucketarr[1000001];

int main(void)
{
	int N;
	cin >> N;
	for (int i = 0; i < N;i++)
	{
		cin >> inputarr[i];
		bucketarr[inputarr[i]]++;
	}
	//cout << bucketarr[0] << bucketarr[1] << bucketarr[2] << "\n";
	vector <int> outputarr(N, -1);
	stack <int> st;
	// 초기화 하려면 vector이 젤 편하다. 
	st.push(0);
	for (int i = 1; i < N; i++)
	{
		if (st.empty()) st.push(i);
		while (!st.empty() && bucketarr[inputarr[st.top()]] < bucketarr[inputarr[i]])
		{
			outputarr[st.top()] = inputarr[i];
			st.pop();
		}
		st.push(i);
	}
	while (!st.empty())
	{
		outputarr[st.top()] = -1;
		st.pop();
	}
	cout << outputarr[0];
	for (int i = 1; i < N; i++)
		cout << " " << outputarr[i];
	cout << "\n";
	return 0;
}

도저히 안돼서 짬뽕해서 한거 ㅋㅋㅋㅋ

 

몇번이나 틀렸는데 알고보니 

이부분에서 bucketarr 1000000만 선언해서 틀림 1000001 이 맞음!!!!

 

ㅋㅋㅋ쿠ㅜ

 

#include <iostream>
#include <queue>
#include <stack>
using namespace std;

int inputarr[1000001];
int bucketarr[1000001];

int main(void)
{
	int N;
	cin >> N;
	for (int i = 0; i < N;i++)
	{
		cin >> inputarr[i];
		bucketarr[inputarr[i]]++;
	}
	vector <int> outputarr(N, -1);
	stack <int> st;
	for (int i = 0; i < N; i++)
	{
		while (!st.empty() && bucketarr[inputarr[st.top()]] < bucketarr[inputarr[i]])
		{
			outputarr[st.top()] = inputarr[i];
			st.pop();
		}
		st.push(i);
	}
	cout << outputarr[0];
	for (int i = 1; i < N; i++)
		cout << " " << outputarr[i];
	cout << "\n";
	return 0;
}

간결하게 한거 

이것저것 필요없이 이거면 충분하다! 

처음에도 이렇게 구현했는뎈ㅋㅋㅋ 1000001 때문에 틀림 ㅜㅜ 

 

 

반응형