https://www.acmicpc.net/problem/24511
๋ฌธ์
ํ๊ฐ๋กญ๊ฒ ๋ฐฉํ์ ๋๊ณ ์๋ ๋ํ์ด๋ ๊ฐ์๊ธฐ ์ฌ๋ฐ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ฐํด๋๋ค. ๊ทธ ์๋ฃ๊ตฌ์กฐ์ ์ด๋ฆ์ queuestack์ด๋ค.
queuestack์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. 1 2 ๋ฒ, ... , N ๋ฒ์ ์๋ฃ๊ตฌ์กฐ(queue ํน์ stack)๊ฐ ๋์ด๋์ด์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์๋ ํ ๊ฐ์ ์์๊ฐ ๋ค์ด์๋ค.
๋ฒ,queuestack์ ์๋์ ๋ค์๊ณผ ๊ฐ๋ค.
- โx0 ์ ์ ๋ ฅ๋ฐ๋๋ค.
- โx0 1 ๋ฒ ์๋ฃ๊ตฌ์กฐ์ ์ฝ์ ํ ๋ค 1 ๋ฒ ์๋ฃ๊ตฌ์กฐ์์ ์์๋ฅผ popํ๋ค. ๊ทธ๋ pop๋ ์์๋ฅผ x1 ์ด๋ผ ํ๋ค. ์
- โx1 2 ๋ฒ ์๋ฃ๊ตฌ์กฐ์์ ์์๋ฅผ popํ๋ค. ๊ทธ๋ pop๋ ์์๋ฅผ x2 ์ด๋ผ ํ๋ค. ์ 2 ๋ฒ ์๋ฃ๊ตฌ์กฐ์ ์ฝ์ ํ ๋ค
- ...
- โxN−1 N ๋ฒ ์๋ฃ๊ตฌ์กฐ์์ ์์๋ฅผ popํ๋ค. ๊ทธ๋ pop๋ ์์๋ฅผ xN ์ด๋ผ ํ๋ค. ์ N ๋ฒ ์๋ฃ๊ตฌ์กฐ์ ์ฝ์ ํ ๋ค
- โxN ์ ๋ฆฌํดํ๋ค.
๋ํ์ด๋ ๊ธธ์ด M ์ ์์ด C ๋ฅผ ๊ฐ์ ธ์์ ์์ด์ ์์๋ฅผ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก queuestack์ ์ฝ์ ํ ๊ฒ์ด๋ค. ์ด์ ์ ์ฝ์ ํ ๊ฒฐ๊ณผ๋ ๋จ์ ์๋ค. (์์ 1 ์ฐธ๊ณ )
queuestack์ ๋ฃ์ ์์๋ค์ด ์ฃผ์ด์ก์ ๋, ํด๋น ์์๋ฅผ ๋ฃ์ ๋ฆฌํด๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ queuestack์ ๊ตฌ์ฑํ๋ ์๋ฃ๊ตฌ์กฐ์ ๊ฐ์ N ์ด ์ฃผ์ด์ง๋ค. (1≤N≤100000 )
๋์งธ ์ค์ ๊ธธ์ด N ์ ์์ด A ๊ฐ ์ฃผ์ด์ง๋ค. i ๋ฒ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ๋ผ๋ฉด Ai=0 , ์คํ์ด๋ผ๋ฉด Ai=1 ์ด๋ค.
์ ์งธ ์ค์ ๊ธธ์ด N ์ ์์ด B ๊ฐ ์ฃผ์ด์ง๋ค. Bi ๋ i ๋ฒ ์๋ฃ๊ตฌ์กฐ์ ๋ค์ด ์๋ ์์์ด๋ค. (1≤Bi≤1000000000 )
๋ท์งธ ์ค์ ์ฝ์ ํ ์์ด์ ๊ธธ์ด M
์ด ์ฃผ์ด์ง๋ค. (1≤M≤100000 )๋ค์ฏ์งธ ์ค์ queuestack์ ์ฝ์ ํ ์์๋ฅผ ๋ด๊ณ ์๋ ๊ธธ์ด M ์ ์์ด C ๊ฐ ์ฃผ์ด์ง๋ค. (1≤Ci≤1000000000 )
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ ์๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์์ด C ์ ์์๋ฅผ ์ฐจ๋ก๋๋ก queuestack์ ์ฝ์ ํ์ ๋์ ๋ฆฌํด๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค.
ํ์ด
์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์๊ธฐ ์ํด์๋ ์ ๋ ๋ง๊ทธ๋๋ก stack ๊ณผ queue๋ฅผ ๊ตฌํํ๋ฉด ์๋ ๊ฒ ๊ฐ์๋ค.
์์ ๋๊ฐ๋ฅผ ๋ฐํ์ผ๋ก ์ง์ ์์ผ๋ก ๋จ๊ณ๋ณ ๋ณํ๋ฅผ ๊ทธ๋ฆฌ๋ฉด์ ๊ท์น์ ์ฐพ์๋๋๋ฐ,
1. ๊ฒฐ๊ตญ ์คํ์ ๊ฐ ์ฝ์ ํ ๊ฐ์ ๋ฐ๋ก ๋ฆฌํดํ๋ฏ๋ก ๋ฌด์ํด๋ ๋๋ค.
2. stackqueue๋ผ๊ณ ์ด๋ ค์ด ์ด๋ฆ์ ๋ฃ๊ธด ํ์ง๋ง stackqueue[i]๋ฅผ i๋ฒ์งธ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฐํํ๋ ๊ฐ์ด๋ผ๊ณ ๋ดค์๋, stackqueue ์์ฒด๋ ํ๋์ ํ๋ค.
3. ๊ฒฐ๋ก ์ ์ผ๋ก n๊ฐ์ ์ธํ๋ค์ค ์คํ์ ๋ค์ด๊ฐ๋ ์ธํ๋ค์ ๋ฌด์ํ๊ณ ํ์ ๋ค์ด๊ฐ๋ ์ธํ๋ค๋ง stackqueue๋ผ๋ ํ์ ์ญ์์ผ๋ก ๋ฃ์ด์ค๋ค
4. m๊ฐ์ ์ธํ๋ค์ stackqueue๋ผ๋ ํ์ ์์๋๋ก ๋ฃ๊ณ front๋ฅผ ๋ฐํํ๋ฉด ๋จ.
์ด๋ ๊ฒฐ๊ตญ queue์ ๊ฐ๋ค๊ณ ๋งํ๊ธด ํ์ง๋ง, n๊ฐ์ ์ธํ์ ๋ฃ์๋ ์ญ์์ผ๋ก ๋ฃ์ด์ค์ผํ๊ธฐ ๋๋ฌธ์ ์๋ฐฉํฅ ์๋ฃ๊ตฌ์กฐ์ธ deque๋ฅผ ์ด์ฉํ๋ค
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
deque<int> stackqueue;
int n, m, input;
cin >> n;
vector<int> isQueue(n);
for(int i=0; i<n; i++)
cin >> isQueue[i];
for(int i=0; i<n; i++) {
cin >> input;
if(isQueue[i]==0) // ํ์ผ๋๋ง ์ฐ์ฐ
stackqueue.push_front(input);
}
cin >> m;
for(int i=0; i<m; i++){
cin >> input;
stackqueue.push_back(input);
cout << stackqueue.front() << " ";
stackqueue.pop_front();
}
return 0;
}
/*
*/
์ํ์ฐฉ์ค
์ฒ์์๋ ๋ฌธ์ ๊ทธ๋๋ก stackqueue ๋ฐฐ์ด ์์ ์คํ๊ณผ ํ๋ฅผ ๊ตฌํํด์ ์๋์ผ๋ก ๊ณ์ฐ์์ผฐ๋ค -> but ์๊ฐ์ด๊ณผ
์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์คํ์ธ ๊ฒฝ์ฐ์๋ ์ฐ์ฐ์ ์๋ตํ๊ณ ํ์ผ๋๋ง ์ฐ์ฐํ๋๋ก ํ๋ค -> however ์๊ฐ์ด๊ณผ!
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n, m, element, input;
cin >> n;
vector<queue<int>> stackqueue(n, queue<int>());
// ์คํ์ผ๋๋ ์ฝ์
ํ๋ ๊ฐ๊ณผ ๋ฆฌํดํ๋ ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก ๊ตณ์ด ์คํ์ ๊ตฌํํ ํ์๊ฐ ์๋ค.
vector<int> isStack(n);
for(int i=0; i<n; i++)
cin >> isStack[i];
for(int i=0; i<n; i++) {
cin >> element;
stackqueue[i].push(element);
}
cin >> m;
for(int i=0; i<m; i++){
cin >> input;
for(int j=0; j<n; j++) {
if(!isStack[j]) { // ํ์ผ๋๋ง ์ฐ์ฐ
stackqueue[j].push(input);
input = stackqueue[j].front();
stackqueue[j].pop();
}
}
cout << input << " ";
}
return 0;
}
/*
*/
์๊ฐ์ ๋ ์ค์ด๊ณ ์ถ์ด์ ์์ ์คํ์ด๋ ํ๋ฅผ ๊ตฌํํ์ง ์์๋ค -> nevertheless ์๊ฐ์ด๊ณผ
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n, m, input;
cin >> n;
vector<int> stackqueue(n);
vector<int> isStack(n);
for(int i=0; i<n; i++)
cin >> isStack[i];
for(int i=0; i<n; i++)
cin >> stackqueue[i];
cin >> m;
for(int i=0; i<m; i++){
cin >> input;
for(int j=0; j<n; j++) {
if(isStack[j]==0) { // ํ์ผ๋๋ง ์ฐ์ฐ
int temp = stackqueue[j];
stackqueue[j] = input;
input = temp;
}
}
cout << input << " ";
}
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 17608๋ฒ: ๋ง๋๊ธฐ (0) | 2023.01.17 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1427๋ฒ: ์ํธ์ธ์ฌ์ด๋ (0) | 2023.01.11 |
[BOJ S5][C++] ๋ฐฑ์ค 10814: ๋์ด์ ์ ๋ ฌ (0) | 2023.01.11 |
[BOJ][C++] ๋ฐฑ์ค 11931๋ฒ: ์ ์ ๋ ฌํ๊ธฐ 4 (0) | 2023.01.11 |
[BOJ][C++] ๋ฐฑ์ค 2751๋ฒ: ์ ์ ๋ ฌํ๊ธฐ 2 (0) | 2023.01.11 |