상세 컨텐츠

본문 제목

< 백준 BaekJoon : 18258번 큐 2> C++

C++/Baekjoon

by J2on 2024. 1. 23. 16:59

본문

 

<< 문제 >> 

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

 

18258번: 큐 2

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

www.acmicpc.net

 

간단히 큐를 구현하면 되는 문제입니다. 

 

저는 배열, head, last 이 세가지를 이용해서 구현했습니다. 

 

 

배열에 쭉 저장해두고

 

head와 last를 이동하며 Queue가 동작합니다.

 

https://wikidocs.net/192523

 

05. 파이썬으로 큐 구현하기

## Queue는 대기 행렬(줄)이다. 큐는 뭔가를 사고 계산하거나 어떤 장소에 들어갈 때 줄을 선 순서대로 처리하는 것을 생각하면 된다. 많은 양의 자료를 프린터로 출력할 때…

wikidocs.net

제가 설명하기 보다는 이런거 참고하시면 쉬울것 같네요.

 

 

<< 코드 >>

 

 

#include <iostream>
#include <string>
using namespace std;

struct myQueue {
  int* list = new int[2000001];
  int head = 0;
  int last = 0;
};

bool empty(myQueue &q) {
  if (q.head == q.last) {
    return true;
  } else {
    return false;
  }
}

void push(myQueue &q, int num) {
  q.list[q.last] = num;
  q.last++;
}

int pop(myQueue &q) {
  if (q.last == q.head) {
    return -1;
  }

  int result = q.list[q.head];
  q.head++;

  return result;
}

int size(myQueue &q) {
  return q.last - q.head; 
}

int front(myQueue &q) {
  if (empty(q)) {
    return -1;
  }

  return q.list[q.head];
}

int back(myQueue &q) {
  if (empty(q)) {
    return -1;
  }

  return q.list[q.last - 1];
}

void task(myQueue &q, string str) {
  if (str == "push") {
    int num;
    cin >> num;
    push(q, num);
  } 
  else if (str == "pop") {
    cout << pop(q) << '\n';
  } 
  else if (str == "size") {
    cout << size(q) << '\n';
  } 
  else if (str == "empty") {
    cout << empty(q) << '\n';
  } 
  else if (str == "front") {
    cout << front(q) << '\n';
  } 
  else if (str == "back") {
    cout << back(q) << '\n';
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  
  int num;
  cin >> num;

  myQueue q;

  for (int i = 0; i < num; i++) {
    string input;
    cin >> input;

    task(q, input);
  }
  delete[] q.list;
}

 

 

 

관련글 더보기

댓글 영역