백준 10845번 큐 C#으로 문제 풀어보기
안녕하세요 박민성입니다.
오늘은 백준 10845번 큐를 풀어 보겠습니다.

문제를 보면
입력은 첫째 줄에는 1보다 크거나 같고 10,000보다 작거나 같은 명령의 수 N이 주어지고 다음 줄부터 명령어가 주어집니다.
출력은 명령어에 따라 한 줄씩 출력합니다.
명령어들은
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
이렇게입니다.
저는 이 문제를 보고 그냥 switch문으로 명령어 검사하고 안에 구현 넣고 문제 이름이 큐인 만큼 자료구조 Queue를 사용하기로 합니다.

이렇게 출력을 명령어 N (1 ≤ N ≤ 10,000) 마다 해주면 시간이 너무 걸릴 것 같아 StringBuilder을 객체 생성해 주고
Queue를 사용할 거니 Queue도 해주었습니다.
그리고 명령어의 수 N도 a에 입력받아 담아줍니다.

명령어 수만큼 for문을 돌려주고 안에는 명령어를 입력받아줍니다.
그 명령어는 switch문에 넣어서 구현해 줄 겁니다.
일단은 하나하나 구현해 보겠습니다.
- push X: 정수 X를 큐에 넣는 연산이다.

이렇게 queue에 X를 넣어줍니다. 처음에는 변수 b 쪽에 같이 이름을 c로 arr [1]을 담아 두려고 했지만 생각해 보니 여기서만 사용하고 입력받을 때 오류가 뜰 수가 있다고 생각하고 여기로 뺏습니다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

이렇게 queue에 Count를 확인해서 0이면 -1을 sb에 넣어주고 queue에 정수가 있으면 그 정수를 빼서 sb에 넣어줍니다.
- size: 큐에 들어있는 정수의 개수를 출력한다.

이거는 그냥 queue에 Count를 sb에 넣어주면 됩니다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다

empty는 queue에 Count가 0이면 sb에 1을 넣어주고 아니면 0을 넣어줍니다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

정수가 없으면 그냥 sb에 -1을 넣어주고 있다면
처음에는 front랑 pop이 무슨 차이가 있는지 5초 정도 생각했는데요.
pop은 Queue에서 빼고 그 뺀 걸 출력하는 거이고
front는 Queue에서 빼지 않고 출력입니다.
그래서 출력하기 위해 빼고 다시 원래상태로 되돌리기에는 너무 귀찮아서
복사본을 만들어서 거기서 빼주기로 합니다.
원래 객체를 생성할 때 Queue <int> queue2 = new Queue <int>();를 해주면 됩니다.
하지만 () 안에다가 있었던 리스트나 스택, 큐 같은 이미 객체 생성이 된 애를 넣어주면 복사가 됩니다.
그리고 빼준걸 sb에 넣어줍니다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

front처럼 back도 같은 방법을 사용하기로 했습니다.
원래는 list.Sort처럼 queue.Reverse 하면 되는 줄 알았지만 객체 생성할 때 해야 하는 걸 찾아보면서 알았습니다.
그리고 sb에 넣어줍니다.
마지막으로

sb를 출력해 주면 끝입니다.

이것이 전체 코드입니다.
이렇게 백준에 제출하였더니

정답이었습니다.