[Stack ํ์ฉ] 17299. ์ค๋ฑํฐ์
by rlaehddnd0422https://www.acmicpc.net/problem/17299
์คํฐ์๋ฅผ ํ์๋ค๋ฉด ๋งค์ฐ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
๋งค์ปค๋์ฆ์ ๋์ผํ๋ฐ, ์คํฐ์์ ๋ฌ๋ฆฌ ์ด๋ค ๊ฐ์ ๋น๊ตํ๊ณ ์ด๋ค ๊ฐ์ ์ ๋ต ๋ฐฐ์ด์ ์ ์ฅํด์ผํ๋์ง๋ง ์ ํ์ ํ๋ฉด ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ฐ์ ์ธํ ์ ํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ๊ณ map์ ์ด์ฉํด ์นด์ดํ ํ์ฌ c ๋ฐฐ์ด์ ํด๋น ์ซ์๊ฐ ๋์จ ํ์๋ฅผ ๋ฃ์ด์ค๋๋ค.
์คํฐ์์์๋ ๋ฐฐ์ด ๊ฐ์ ์คํ์ ๋ฃ๊ณ ์คํ์ ํ๊ฐ๊ณผ ๋น๊ตํ๋ค๋ฉด, ์ค๋ฑํฐ์ ๋ฐฐ์ด์ ๋ง๋๋ ๊ณผ์ ์์๋ ๋น๊ต ๊ณผ์ ์์ v๋ฐฐ์ด์ด ์๋ c ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ฐ์ ๋น๊ตํฉ๋๋ค. ๋ฌผ๋ก ํธ์ฌํ ๋๋ ์คํฐ์ ๋ฐฐ์ด๊ณผ ๋์ผํ๊ฒ ๋ฐฐ์ด ๊ฐ์ ์ฝ์ ํฉ๋๋ค.
ํ์๋ ๋น๊ตํ ๋๋ stack์ top์ second ( c๋ฐฐ์ด ), ํธ์ฌํ ๋๋ stack์ top์ first ( v๋ฐฐ์ด ) ์ฌ์ฉํ๊ธฐ ์ํด ์คํ์ v๋ฐฐ์ด๊ฐ๊ณผ c๋ฐฐ์ด๊ฐ์ pair๋ก ๋ฌถ์ด์ ์ฌ์ฉํ์์ต๋๋ค.
์์ค ์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <unordered_map>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n'
using namespace std;
int n;
vector<int> v(1000001);
vector<int> cnt(1000001);
vector<int> ans(1000001,-1);
unordered_map<int, int> m;
stack<pair<int,int>> st;
int main()
{
FASTio;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> v[i];
m[v[i]]++;
}
for(int i=0;i<n;i++)
{
cnt[i] = m[v[i]];
}
st.push(make_pair(v[n-1], cnt[n-1]));
for(int i=n-2;i>=0;i--)
{
while(!st.empty() && st.top().second <= cnt[i])
{
st.pop();
}
if(st.empty())
{
st.push(make_pair(v[i], cnt[i]));
continue;
} else {
ans[i] = st.top().first;
st.push(make_pair(v[i], cnt[i]));
}
}
for(int i=0;i<n;i++){
cout << ans[i] << ' ';
}
return 0;
}
์ฒ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํด์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ค๊ฐ map์์ ์๊ฐ์ด๊ณผ๊ฐ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์ธ์งํ์ต๋๋ค.
๊ทธ๋์ map์ unordered_map์ผ๋ก ๋ฐ๊ฟ์ ํด๊ฒฐ.
์ฐธ๊ณ ์๋ฃ
'๐ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DP] 13398. ์ฐ์ํฉ 2 (2) | 2023.09.16 |
---|---|
[DP] 11053. ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 (0) | 2023.09.12 |
[Stack ํ์ฉ] 17298. ์คํฐ์ (0) | 2023.09.08 |
[C++] cin.ignore()์ผ๋ก ๋ฒํผ ๋น์ฐ๊ธฐ (0) | 2023.09.04 |
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm) (0) | 2023.02.13 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422