본문으로 바로가기

백준 18258 - 큐 2

category BOJ 백준/기타 2020. 10. 31. 19:56

출처 : https://www.acmicpc.net/problem/18258 

 

18258번: 큐 2

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

www.acmicpc.net

 

고려사항

- 큐를 직접 구현하기...

- 큐 사이즈를 줄이고 % 연산을 활용해 원형 큐를 구현할 수 있지만

1. push 가 연속으로 몇개 들어올지 알 수 없음.

2. 메모리가 넉넉하기 512mb 임

이라서 간단하게 배열로 구현ㅎㅎ..

- 입출력 시간 관리...

개인적으로 입출력으로 인해 정답 여부가 갈리는 문제들이 허망하게 느껴진다...

1. cstdio 를 포함시키고 printf, scanf 로 코드를 짜기.

2. endl 말고 "\n" 사용하기

3. cout, cin 을 사용할꺼면 tie(NULL), sync(false) 쓰기.

등등의 방법 사용하기..

 

#include <iostream>
using namespace std;

int q[2000000];
int f = 0, e = 0;

void push(int num){
    q[e++] = num;
}

int pop(){
    if(f == e){
        return -1;
    }else{
        return q[f++];
    }
}

int size(){
    return e - f;
}

int empty(){
    if(f == e){
        return 1;
    }else{
        return 0;
    }
}

int front(){
    if(f == e){
        return -1;
    }else{
        return q[f];
    }
}

int back(){
    if(f == e){
        return -1;
    }else{
        return q[e-1];
    }
}
int main() {
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    
    int n, num;
    string op;

    cin>>n;
    for(int i=0;i<n;++i){
        cin>>op;

        if(op == "push"){
            cin>>num;
            push(num);
        }else if(op == "pop"){
            cout<<pop()<<"\n";
        }else if(op == "size"){
            cout<<size()<<"\n";
        }else if(op == "empty"){
            cout<<empty()<<"\n";
        }else if(op == "front"){
            cout<<front()<<"\n";
        }else if(op == "back"){
            cout<<back()<<"\n";
        }
    }
    return 0;
}

'BOJ 백준 > 기타' 카테고리의 다른 글

백준 05430 - AC  (0) 2020.11.05
백준 01021 - 회전하는 큐  (0) 2020.11.05
백준 01966 - 프린터 큐  (0) 2020.11.03
백준 11866 - 요세푸스 문제 0  (0) 2020.11.01
백준 01874 - 스택 수열  (0) 2020.10.31