반응형
#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 때문에 틀림 ㅜㅜ
반응형
'C언어' 카테고리의 다른 글
백준 10820번 문자열분석 : fgets 함수 ! (2) | 2020.08.18 |
---|---|
백준 10808/10809번 알파벳 찾기 bucket 이용하기 (0) | 2020.08.18 |
백준 1918번 후위표기식 만들기 : 반례추가 (0) | 2020.08.18 |
백준 1935번 boj 후위 표기식2 : stack 써서 calculate number! (0) | 2020.08.18 |
백준 17298번 오큰수 / 인덱스와 값의 비교 유의해야 (0) | 2020.08.17 |
백준 10799번 boj 쇠막대기와 레이저 / stack썼다가 더 쉽게 고침 (0) | 2020.08.17 |
백준 boj 17413번 단어 뒤집기 2 stl 짱! (0) | 2020.08.17 |
boj 백준 1158번 요세푸스 문제 한번에 통과 ! (0) | 2020.08.12 |