mint* 2023. 3. 2. 23:23
728x90

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

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

#include <bits/stdc++.h>
using namespace std;
#define fpos aaa

const int MAX = 100000;
int a[MAX+4],n, fpos=-1, bpos=-1;
string s1, s2;
int main(){
    ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
    cin >> n;
    while(n--){
        cin >> s1;
        if(s1=="push"){
            cin >> s2;
            if(fpos==-1){ //첫번째 원소일때
                fpos=bpos=0;
                a[bpos]=stoi(s2);
            }
            else { //뒤에 추가
                bpos++;
                a[bpos]=stoi(s2);
            }
        }
        else if (s1=="pop"){
            if(fpos==-1) cout << "-1\n"; //비었을때
            else if(fpos==bpos){ //원소 하나일때
                cout << a[fpos]<<"\n"; //마지막 원소 출력
                fpos=bpos=-1; //pos초기화
            } 
            else { //앞에서 pop후 증가
                cout << a[fpos]<<"\n";
                fpos++;
            }
        } 
        else if (s1=="size"){
            if(bpos==-1) cout <<"0\n"; //비었을때
            else cout << bpos-fpos+1<<"\n";
        }
        else if(s1=="empty"){
            if(bpos==-1)cout << "1\n";
            else cout << "0\n";
        }
        else if(s1=="front"){
            if(fpos!=-1) cout << a[fpos]<<"\n";
            else cout << "-1\n";
        }
        else if(s1=="back"){
            if(bpos!=-1) cout << a[bpos]<<"\n";
            else cout << "-1\n";
        }
    }
}

 

 

테스트케이스 살펴보지않더라도 한번에 맞도록 노력하자.

항상 비어있을 때를 생각하자.

 

멋진 풀이를 발견했다.

https://www.acmicpc.net/source/38434701

 

로그인

 

www.acmicpc.net

 

엄청 짧은데 훨씬 간단하다. 

728x90