• toc {:toc}

문제

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 큐λ₯ΌΒ κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 μ—¬μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό 큐에 λ„£λŠ” 연산이닀.
  • pop: νμ—μ„œ κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: νκ°€Β λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • front: 큐의 κ°€μž₯ μ•žμ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • back: 큐의 κ°€μž₯ 뒀에 μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ 큐에 λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≀ N ≀ 10,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

좜처:https://www.acmicpc.net/problem/10845

풀이

큐 κ΅¬ν˜„

STL Queue μ‚¬μš©

#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie();
    queue<int> q;
    int n;
    cin >> n;
    while(n--){
        string str;
        cin >> str;
        if(str == "push"){
            int p;
            cin >> p;
            q.push(p);
        }
        else if(str == "front"){
            if(q.empty()) cout << -1 << endl;
            else cout << q.front() << endl;
        }
        else if(str == "back"){
            if(q.empty()) cout << -1 << endl;
            else cout << q.back() << endl;
        }
        else if(str == "size") cout << q.size() << endl;
        else if(str == "empty") cout << int(q.empty()) << endl;
        else if(str == "pop"){
            if(q.empty()) cout << -1 << endl;
            else {
                cout << q.front() << endl;
                q.pop();
            }
        }
    }
    return 0;
}

λ°°μ—΄λ‘œ κ΅¬ν˜„

#include <bits/stdc++.h>
 
using namespace std;
 
const int MX = 1000005;
int dat[MX];
int head=0, tail=0;
 
void push(int x){
    dat[tail++]=x;
}
 
void pop(){
    if(head < tail) head++;
}
 
void size(){
    cout << tail - head << endl;
}
 
int empty(){
    if(head == tail) return 1;
    else return 0;
}
 
void front(){
    if(empty()) cout << -1 << endl;
    else cout << dat[head] << endl;
}
 
void back(){
    if(empty()) cout << -1 << endl;
    else cout << dat[tail-1] << endl;
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie();
    int n;
    cin >> n;
    while(n--){
        string str;
        cin >> str;
        if(str == "push"){
            int p;
            cin >> p;
            push(p);
        }
        else if(str == "pop"){
            if(!empty()){
                front();
                pop();
            }
            else cout << -1 << endl;
        }
        else if(str == "size") size();
        else if(str == "empty") cout << empty() << endl;
        else if(str == "front"){
            if(empty()) cout << -1 << endl;
            else cout << dat[head] << endl;
        }
        else if(str == "back"){
            if(empty()) cout << -1 << endl;
            else cout << dat[tail-1] << endl;
        } 
    }
    return 0;
}