C, C++/🥈 BOJ

(C++) ★Stack & Queue & Deque Intermediate I - 4 Solved★

metamong 2024. 11. 15.

★ 28278 스택 2 ★

//28278
#include <iostream>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N, order, num;
    cin >> N;
    stack<int> s;

    while(N--){
        cin>>order;
        if (order==1){
            cin>>num;
            s.push(num);
        }
        else if(order==2){
            if(!s.empty()){
                cout << s.top() << '\n';
                s.pop();
            }
            else{
                cout << -1 << '\n';
            }
        }
        else if(order == 3){
            cout << s.size() << '\n';
        }
        else if(order == 4){
            if(s.empty()){
                cout << 1 << '\n';
            }
            else{
                cout << 0 << '\n';
            }
        }
        else{
            if(!s.empty()){
                cout << s.top() << '\n';
            }
            else{
                cout << -1 << '\n';
            }
        }

    }
	return 0;
}

★ 18258 큐 2 ★

//18258
#include <iostream>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N, num;
    string order;
    cin >> N;
    queue<int> q;

    while(N--){
        cin >> order;
        if(order == "push"){
            cin >> num;
            q.push(num);
        }
        else if(order == "pop"){
            if (!q.empty()){
                cout << q.front() << '\n';
                q.pop();
            }
            else{
                cout << -1 << '\n';
            }
        }
        else if(order == "size"){
            cout << q.size() << '\n';
        }
        else if(order == "empty"){
            if (q.empty()){
                cout << 1 << '\n';
            }
            else{
                cout << 0 << '\n';
            }
        }
        else if(order == "front"){
            if (!q.empty()){
                cout << q.front() << '\n';
            }
            else{
                cout << -1 << '\n';
            }
        }
        else{
            if(!q.empty()){
                cout << q.back() << '\n';
            }
            else{
                cout << -1 << '\n';
            }
        }
    }
	return 0;
}

★ 2164 카드2 ★

//2164
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N;
    cin >> N;

    queue<int> q;
    
    for(int i=1;i<=N;i++){
        q.push(i);
    }

    while(q.size()>1){
        q.pop();
        q.push(q.front());
        q.pop();
    }

    cout << q.front() << '\n';

	return 0;
}

 

🥦 queue를 for문으로 돌릴 때 while(!q.empty())를 활용해 q.front()로 출력해서 확인하면 된다.


★ 11866 요세푸스 문제 0 ★

//11866
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N, K, cnt;
    queue<int> q;
    cin >> N >> K;
    cnt = K;

    for(int i = 1; i < N+1; i++){
        q.push(i);
    }

    cout << '<';
    while(q.size()>0){
        cnt = K-1;
        while(cnt--){
            q.push(q.front());
            q.pop();
        }
        if(q.size()>1){
            cout << q.front() << ", ";
        }
        else{
            cout << q.front();
        }
        q.pop();
        
    }
    cout << '>';

	return 0;
}

 

🥦 원 순열 문제는 한 개를 기준으로 처음과 끝이 정해져 있으므로 queue 자료구조 많이 사용. 주어진 대로 front()와 push(), pop() 순서에 맞게 잘 구현하면 된다.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글