[Stack ํ์ฉ] 17298. ์คํฐ์
by rlaehddnd0422
์์ฝ
1. ํฌ๊ธฐ๊ฐ N์ธ ๋ฐฐ์ด์์
2. i๋ฒ์งธ ์ธ๋ฑ์ค์ ๋ฐฐ์ด์ ๊ฐ์์ ์ค๋ฅธ์ชฝ์ ์๋ ์ ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ์ถ๋ ฅ
3. ๋ง์ฝ ์ค๋ฅธ์ชฝ์ ์๋ ์๊ฐ ํ์ฌ ์ธ๋ฑ์ค์ ๋ฐฐ์ด์ ๊ฐ๋ณด๋ค ์๋ค๋ฉด -1 ์ถ๋ ฅ
์ด์ค ํฌ๋ฌธ์ผ๋ก ํด๊ฒฐ์ ๊ฐ๋ฅํ์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ์ 1,000,000 * 1,000,000 = 1,000,000,000,000 (1์กฐ) ์ฆ, 1์กฐ / 1์ต(1s) = 10,000s๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋์ด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฌธ์ ๋ ๋ฐฐ์ด์ i๋ฒ์งธ ๊ฐ์์ ์ค๋ฅธ์ชฝ์ ์๋ ์ ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ์ด๋ป๊ฒ ๋น ๋ฅด๊ฒ ๊ตฌํ๋๊ฐ ๊ด๊ฑด์ ๋๋ค.
์์ด๋์ด๊ฐ ๋ ์ค๋ฅด์ง ์์ ๊ฒ์์ ํด๋ณด์๋๋ฐ ๋๋ถ๋ถ ์คํ์ ์ด์ฉํ์ฌ ๋ฐฐ์ด์ ํ๋ฒ๋ง ํ์ด O(N) ์๊ฐ ์์ ํด๊ฒฐํ์์ต๋๋ค.
Solution : Stack ํ์ฉํ๊ธฐ
๋ฐฐ์ด ๋ ๊ฐ๋ถํฐ 0๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ๊น์ง ๊ฒ์ฌํ์ฌ ์ถ๋ ฅ ๋ฐฐ์ด์ ๊ฐ์ ๋์ถํฉ๋๋ค. ์ด ๋ ์คํ์ ์ด์ฉํด์ ๊ฒ์ฌํ๋๋ฐ, ์คํ์ ์ด๋ป๊ฒ ํ์ฉํ์๋์ง ๊ทธ๋ฆผ์ ํตํด ์ดํด๋ด ์๋ค.
v๋ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ๋๋ค. ans๋ ๊ตฌํ ์คํฐ์ ๋ฐฐ์ด
set
1) ์คํฐ์ ๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ์ ๋น๊ตํ ๋์์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ -1๊ฐ์ด ๋ค์ด๊ฐ๋๋ค.
2) stack์ ํ์ฌ ์ธ๋ฑ์ค ๋ฐฐ์ด๊ฐ์ pushํฉ๋๋ค.
ans : ( ) ( ) ( ) -1
์ด์ ๋ถํฐ ์คํ์ ์ด์ฉํ์ฌ ๋์์๋ถํฐ ํ๋์ฉ ์คํฐ์ ๋ฐฐ์ด์ ์ฑ์๋ณด๊ฒ ์ต๋๋ค.
1. ์ฐ์ stack์ top์ ์๋ ๊ฐ๊ณผ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ๋น๊ตํฉ๋๋ค.
- ์ฌ๊ธฐ์ ์คํ์ top์ ์๋ ๊ฐ์ด ๋ ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์คํ์ top์ ์๋ ๊ฐ์ด ๋ ํด ๋๊น์ง ์คํ์ pop ํฉ๋๋ค.
2. ๋น๋ก์ ์คํ์ ํ ๊ฐ์ด ๋ ์ปค์ง๊ฒ ๋๋ฉด ๋ฐ๋ก ๊ทธ ์คํ์ ํ์ ์๋ ๊ฐ์ด ์คํฐ์ ๊ฐ์ด ๋๋ฏ๋ก, ์ ๋ต ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ์ด์ค๋๋ค.
3. ์ฌ๊ธฐ์ ๋์ด ์๋๋ผ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ stack์ ํธ์ฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
why : ํ์ฌ ๊ฐ์ด ๋ค์ ์งํํ๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์คํฐ์๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ stack์ ํธ์ฌํฉ๋๋ค
์ฃผ์ํด์ผ ํ ์ !
์ด ๋ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ์ด ๋ชจ๋ ํ์ฌ ์ธ๋ฑ์ค๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ ์คํ์ด ๋น์์ง๋๋ฐ ์ด ๊ฒฝ์ฐ์๋ ์คํ์ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ์คํ์ ๋ฃ๊ณ , ์ ๋ต ๋ฐฐ์ด์ -1์ ๋ฃ์ด์ค๋๋ค.
ans : ( ) ( ) (7) -1
์ด ๋งค์ปค๋์ฆ์ผ๋ก ๋ค์ ์คํฐ์๋ฅผ ๊ตฌํด๋ด ์๋ค.
1. ํ์ฌ stack์๋ ์ด์ ๊ณผ์ ์ ํตํด 2, 7์ด ๋ค์ด๊ฐ ์์ต๋๋ค.
2. ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ธ 5์ stack์ top ( 2 )๋ฅผ ๋น๊ตํ๋ฉด ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ด ๋ ํฌ๋ ๋ ์์๋๊น์ง stack์ popํฉ๋๋ค.
3. ๋น๋ก์ stack์ ํ ๊ฐ์ด ๋ ์ปค์ง๊ฒ ๋๋ฉด ์ ๋ต ๋ฐฐ์ด ๊ฐ์ ์คํ์ ํ ๊ฐ์ด ๋๊ณ , ์คํ์ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ธ 5๊ฐ push ๋ฉ๋๋ค.
ans : ( ) (7) (7) -1
ans : (5) (7) (7) -1
์ด๋ ๊ฒ ์คํ์ ์ด์ฉํด์ O(N) ์๊ฐ ์์ ์คํฐ์ ๋ฐฐ์ด์ ๊ตฌํ์์ต๋๋ค.
์์ค์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#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> ans(1000001);
stack<int> st;
int main()
{
FASTio;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> v[i];
}
st.push(v[n-1]);
ans[n-1] = -1;
for(int i=n-2;i>=0;i--)
{
while(!st.empty() && st.top() <= v[i])
{
st.pop();
}
if(st.empty())
{
st.push(v[i]);
ans[i] = -1;
continue;
} else {
ans[i] = st.top();
st.push(v[i]);
}
}
for(int i=0;i<n;i++)
{
cout << ans[i] << ' ';
}
return 0;
}
'๐ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DP] 11053. ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 (0) | 2023.09.12 |
---|---|
[Stack ํ์ฉ] 17299. ์ค๋ฑํฐ์ (0) | 2023.09.08 |
[C++] cin.ignore()์ผ๋ก ๋ฒํผ ๋น์ฐ๊ธฐ (0) | 2023.09.04 |
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ(Greedy Algorithm) (0) | 2023.02.13 |
17142. ์ฐ๊ตฌ์ 3 (0) | 2023.02.10 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422