https://www.acmicpc.net/problem/18115
๋ฌธ์
์ํ์ด๋ ์นด๋ ๊ธฐ์ ์ ์ฐ์ตํ๊ณ ์๋ค. ์ํ์ด์ ์์ ๋ค๋ฆฐ ์นด๋๋ฅผ ํ๋์ฉ ๋ด๋ ค๋์ ๋ฐ๋ฅ์ ์์ผ๋ ค๊ณ ํ๋ค. ์ํ์ด๊ฐ ์ธ ์ ์๋ ๊ธฐ์ ์ ๋ค์ 3๊ฐ์ง๋ค.
- ์ ์ผ ์์ ์นด๋ 1์ฅ์ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค.
- ์์์ ๋ ๋ฒ์งธ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. ์นด๋๊ฐ 2์ฅ ์ด์์ผ ๋๋ง ์ธ ์ ์๋ค.
- ์ ์ผ ๋ฐ์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. ์นด๋๊ฐ 2์ฅ ์ด์์ผ ๋๋ง ์ธ ์ ์๋ค.
์ํ์ด๋ ์ฒ์์ ์นด๋ N์ฅ์ ๋ค๊ณ ์๋ค. ์นด๋์๋ 1๋ถํฐ N๊น์ง์ ์ ์๊ฐ ์ค๋ณต๋์ง ์๊ฒ ์ ํ ์๋ค. ๊ธฐ์ ์ N๋ฒ ์ฌ์ฉํ์ฌ ์นด๋๋ฅผ ๋ค ๋ด๋ ค๋์์ ๋, ๋์ฌ ์๋ ์นด๋๋ค์ ํ์ธํ๋๋ ์์์๋ถํฐ ์์๋๋ก 1, 2, …, N์ด ์ ํ ์์๋ค!
๋๋ ์ํ์ด๋ ์ฒ์์ ์นด๋๊ฐ ์ด๋ป๊ฒ ๋ฐฐ์น๋์ด ์์๋์ง ๊ถ๊ธํด์ก๋ค. ์ฒ์ ์นด๋์ ์ํ๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ N (1 ≤ N ≤ 106)์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค์๋ ๊ธธ์ด๊ฐ N์ธ ์์ด A๊ฐ ์ฃผ์ด์ง๋ค. Ai๊ฐ x์ด๋ฉด, i๋ฒ์งธ๋ก ์นด๋๋ฅผ ๋ด๋ ค๋์ ๋ x๋ฒ ๊ธฐ์ ์ ์ผ๋ค๋ ๋ป์ด๋ค. Ai๋ 1, 2, 3 ์ค ํ๋์ด๋ฉฐ, An์ ํญ์ 1์ด๋ค.
์ถ๋ ฅ
์ด๊ธฐ ์นด๋์ ์ํ๋ฅผ ์์์๋ถํฐ ์์๋๋ก ์ถ๋ ฅํ์ฌ๋ผ.
ํ์ด
๊ฒฐ๊ณผ ์นด๋์ธ 1~n๊น์ง์ ์๊ฐ ์์๋๋ก ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ ๊ธฐ์ ๋ค์ ๊ฑฐ๊พธ๋ก ์ํํ๋ค
- ์ ์ผ ์์ ์นด๋ 1์ฅ์ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> ์นด๋๋ฅผ ๋งจ ์๋ก ๋ฃ๋๋ค
- ์์์ ๋ ๋ฒ์งธ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> ์นด๋๋ฅผ ์์์ ๋๋ฒ์งธ ์์น๋ก ๋ฃ๋๋ค
-> ๋งจ ์ ์นด๋ pop ์ํํ ํด๋น ์นด๋๋ฅผ pushํ๊ณ popํ๋ ์นด๋ ๋ค์ push - ์ ์ผ ๋ฐ์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> ์นด๋๋ฅผ ์ ์ผ ๋ฐ์ผ๋ก ๋ฃ๋๋ค
์นด๋๋ฅผ ์์ ๋ฃ์๋ค๊ฐ ๋ฐ์ ๋ฃ์๋ค๊ฐ ๋ฐฉํฅ์ด ์๋ค๊ฐ๋ค ํ๋ฏ๋ก ์๋ฐฉํฅ์ธ ๋ฑ์ ์ฌ์ฉํด๋ณด์
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <stack>
#include <deque>
using namespace std;
int main() {
int n;
cin >> n;
stack<int> skills;
for(int i=0; i<n; i++) {
int input;
cin >> input;
skills.push(input);
}
deque<int> ans;
for(int i=1; i<=n; i++){ // i๋ฒ์งธ ์ํ๋๋ i๋ฒ ์นด๋๋ฅผ ์์ง์ธ๋ค
int skill = skills.top();
skills.pop(); // ์คํฌ์ ์ต๊ทผ๊ฒ๋ถํฐ ๊บผ๋ด์ ๊ฑฐ๊พธ๋ก ์ํ
switch (skill) {
case 1: // ์ ์ผ ์์ ์นด๋ 1์ฅ์ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ๋งจ ์๋ก ๋ฃ๋๋ค
ans.push_front(i);
break;
case 2: // ์์์ ๋ ๋ฒ์งธ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ์์์ ๋๋ฒ์งธ ์์น๋ก ๋ฃ๋๋ค
{
int top_card = ans.front();
ans.pop_front();
ans.push_front(i);
ans.push_front(top_card);
break;
}
case 3: // ์ ์ผ ๋ฐ์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ์ ์ผ ๋ฐ์ผ๋ก ๋ฃ๋๋ค
ans.push_back(i);
break;
}
}
while(!ans.empty()){
cout << ans.front() << " ";
ans.pop_front();
}
return 0;
}
/*
*/
solutionํจ์ ๋ฒ์ (ํ๋ก๊ทธ๋๋จธ์ค)
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <stack>
#include <deque>
using namespace std;
deque<int> solution(int n, stack<int> &skills) {
deque<int> ans;
for(int i=1; i<=n; i++){ // i๋ฒ์งธ ์ํ๋๋ i๋ฒ ์นด๋๋ฅผ ์์ง์ธ๋ค
int skill = skills.top();
skills.pop(); // ์คํฌ์ ์ต๊ทผ๊ฒ๋ถํฐ ๊บผ๋ด์ ๊ฑฐ๊พธ๋ก ์ํ
switch (skill) {
case 1: // ์ ์ผ ์์ ์นด๋ 1์ฅ์ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ๋งจ ์๋ก ๋ฃ๋๋ค
ans.push_front(i);
break;
case 2: // ์์์ ๋ ๋ฒ์งธ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ์์์ ๋๋ฒ์งธ ์์น๋ก ๋ฃ๋๋ค
{
int top_card = ans.front();
ans.pop_front();
ans.push_front(i);
ans.push_front(top_card);
break;
}
case 3: // ์ ์ผ ๋ฐ์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ด๋ ค๋๋๋ค. -> i ์นด๋๋ฅผ ์ ์ผ ๋ฐ์ผ๋ก ๋ฃ๋๋ค
ans.push_back(i);
break;
}
}
return ans;
}
int main() {
int n;
cin >> n;
stack<int> skills;
for(int i=0; i<n; i++) {
int input;
cin >> input;
skills.push(input);
}
deque<int> ans = solution(n, skills);
while(!ans.empty()){
cout << ans.front() << " ";
ans.pop_front();
}
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon > Linear Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 17299๋ฒ: ์ค๋ฑํฐ์ (0) | 2023.05.25 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1918๋ฒ: ํ์ ํ๊ธฐ์ (0) | 2023.05.24 |
[BOJ][C++] ๋ฐฑ์ค 20301๋ฒ: ๋ฐ์ ์์ธํธ์ค (0) | 2023.04.08 |
[BOJ S1][C++] ๋ฐฑ์ค 4889๋ฒ : ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.09.14 |
[BOJ S5][C++] ๋ฐฑ์ค 11866๋ฒ : ์์ธํธ์ค ๋ฌธ์ 0 (0) | 2022.09.12 |