๐Ÿ•๏ธ ICPC Sinchon

[BOJ S3][C++] ๋ฐฑ์ค€ 24511๋ฒˆ: queuestack (์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž)

์„ ๋‹ฌ 2023. 1. 13. 01:17
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/24511

 

24511๋ฒˆ: queuestack

์ฒซ์งธ ์ค„์— queuestack์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ฐœ์ˆ˜ $N$์ด ์ฃผ์–ด์ง„๋‹ค. ($1 \leq N \leq 100\,000$) ๋‘˜์งธ ์ค„์— ๊ธธ์ด $N$์˜ ์ˆ˜์—ด $A$๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. $i$๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ๋ผ๋ฉด $A_i = 0$, ์Šคํƒ์ด๋ผ๋ฉด $A_i = 1$์ด๋‹ค. ์…‹์งธ ์ค„

www.acmicpc.net

 

๋ฌธ์ œ

ํ•œ๊ฐ€๋กญ๊ฒŒ ๋ฐฉํ•™์— ๋†€๊ณ  ์žˆ๋˜ ๋„ํ˜„์ด๋Š” ๊ฐ‘์ž๊ธฐ ์žฌ๋ฐŒ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค. ๊ทธ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ด๋ฆ„์€ queuestack์ด๋‹ค.

queuestack์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1๋ฒˆ, 2๋ฒˆ, ... , N๋ฒˆ์˜ ์ž๋ฃŒ๊ตฌ์กฐ(queue ํ˜น์€ stack)๊ฐ€ ๋‚˜์—ด๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์—๋Š” ํ•œ ๊ฐœ์˜ ์›์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

queuestack์˜ ์ž‘๋™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • โ€Šx0์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • โ€Šx0์„ 1๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์— ์‚ฝ์ž…ํ•œ ๋’ค 1๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์›์†Œ๋ฅผ popํ•œ๋‹ค. ๊ทธ๋•Œ pop๋œ ์›์†Œ๋ฅผ x1์ด๋ผ ํ•œ๋‹ค.
  • โ€Šx1์„ 2๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์— ์‚ฝ์ž…ํ•œ ๋’ค 2๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์›์†Œ๋ฅผ popํ•œ๋‹ค. ๊ทธ๋•Œ pop๋œ ์›์†Œ๋ฅผ x2์ด๋ผ ํ•œ๋‹ค.
  • ...
  • โ€ŠxN−1์„ N๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์— ์‚ฝ์ž…ํ•œ ๋’ค N๋ฒˆ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์›์†Œ๋ฅผ popํ•œ๋‹ค. ๊ทธ๋•Œ pop๋œ ์›์†Œ๋ฅผ xN์ด๋ผ ํ•œ๋‹ค.
  • โ€Š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;
}

/*
 */
๋ฐ˜์‘ํ˜•