출처 : 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 |
