알고리즘/BOJ

백준 10845번 큐

꾸준함. 2018. 7. 4. 20:36

문제 링크입니다: https://www.acmicpc.net/problem/10845


오랜만에 자료구조 큐를 복습할 수 있던 문제였습니다.

사실, 덱(deque)을 쓰면 훨씬 쉬운 문제였지만 문제의 의도대로 큐를 사용해서 풀었습니다.

덱을 사용하면 back도 쉽게 할 수 있지만 큐는 FIFO(First In First Out) 구조이기 때문에 살짝 까다로울 수 있습니다.

저 같은 경우에는 back을 출력하기 위해 (현재 큐의 사이즈 - 1)만큼 pop을 한 다음에 push를 하는 방식으로 큐를 환형큐라고 생각하면서 오른쪽으로 쉬프트했습니다.


#include <iostream>

#include <string>

#include <queue>

using namespace std;

 

int N;

 

int main(void)

{

        cin >> N;

        queue<int> q;

 

        for (int i = 0; i < N; i++)

        {

                 string command;

                 cin >> command;

 

                 if (command == "push")

                 {

                         int num;

                         cin >> num;

 

                         q.push(num);

                 }

                 else if (command == "pop")

                 {

                         if (!q.empty())

                         {

                                 cout << q.front() << endl;

                                 q.pop();

                         }

                         else

                                 cout << -1 << endl;

                 }

                 else if (command == "size")

                         cout << q.size() << endl;

                 else if (command == "empty")

                         cout << q.empty() << endl;

                 else if (command == "front")

                 {

                         if (!q.empty())

                                 cout << q.front() << endl;

                         else

                                 cout << -1 << endl;

                 }

                 else if (command == "back")

                 {

                         if (!q.empty())

                         {

                                 int curSize = q.size();

                                 //현재 큐 크기 - 1 만큼 반복문을 돌리며 front를 뒤로 넣는다

                                 for (int j = 0; j < curSize - 1; j++)

                                 {

                                          int num = q.front();

                                          q.pop();

                                          q.push(num);

                                 }

                                 //반복문 수행 후 front back

                                 int num = q.front();

                                 q.pop();

                                 cout << num << endl;

                                 //원상 복귀

                                 q.push(num);

                         }

                         else

                                 cout << -1 << endl;

                 }

        }

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1695번 팰린드롬 만들기  (2) 2018.07.06
백준 2580번 스도쿠  (9) 2018.07.05
백준 12100번 2048(Easy)  (4) 2018.07.04
백준 1107번 리모컨  (2) 2018.07.04
백준 2251번 물통  (10) 2018.07.04