1. 10828번 큐
https://www.acmicpc.net/problem/10845
2. #큐
큐는 선입선출(FIFO, First-In-First-Out) 원칙에 따라 동작하는 추상적인 자료구조입니다. 큐는 일상 생활에서 줄을 서서 기다리는 것과 비슷한 개념으로 이해할 수 있습니다.큐에는 두 가지 주요 연산이 있습니다: "enqueue"와 "dequeue"입니다.
- Enqueue: 큐의 뒤쪽에 요소를 추가합니다. 이는 줄의 맨 뒤에 사람이 추가되는 것과 비슷합니다.
- Dequeue: 큐의 앞쪽에서 요소를 제거합니다. 줄의 맨 앞에 있는 사람이 서비스를 받고 나가는 것과 비슷합니다.
이렇게 큐에서는 항상 첫 번째로 들어온 요소가 먼저 처리되고, 마지막으로 들어온 요소가 가장 나중에 처리됩니다.
2.1. #문제

2.2. #풀이
<cpp />
#include <iostream>
#include<queue>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
queue<int>myqueue;
int n;
string str;
cin >> n;
cin.ignore();
while (n--)
{
getline(cin, str);
if (str.substr(0, 4) == "push")
{
myqueue.push(stoi(str.substr(5)));
}
else if (str == "front")
{
if (myqueue.empty()) cout << -1 << '\n';
else cout << myqueue.front() << '\n';
}
else if (str == "back")
{
if (myqueue.empty()) cout << -1 << '\n';
else cout << myqueue.back() << '\n';
}
else if (str == "size")
{
cout << myqueue.size() << '\n';
}
else if (str == "empty")
{
cout << myqueue.empty() << '\n';
}
else if (str == "pop")
{
if (myqueue.empty()) cout << -1 << '\n';
else
{
cout << myqueue.front() << '\n';
myqueue.pop();
}
}
}
}
- queue<int> 클래스의 객체를 myqueue라는 이름으로 생성합니다.
- 큐에 수행할 작업의 개수를 저장하기 위해 변수 n을 선언합니다.
- 각 작업에 대한 입력 문자열을 저장하기 위해 문자열 변수 str을 선언합니다.
- cin >> n을 사용하여 사용자로부터 n의 값을 읽어옵니다.
- 코드는 조건문 (if 및 else if)을 사용하여 입력 문자열에 기반하여 수행할 작업을 결정합니다.
- 입력 문자열이 "push"로 시작하는 경우, stoi()를 사용하여 문자열에서 정수 값을 추출하고, myqueue.push()를 사용하여 큐에 해당 값을 넣습니다.
- 입력 문자열이 "front"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력하고, 그렇지 않으면 myqueue.front()를 사용하여 큐의 맨 앞 요소를 출력합니다.
- 입력 문자열이 "back"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력하고, 그렇지 않으면 myqueue.back()을 사용하여 큐의 맨 뒤 요소를 출력합니다.
- 입력 문자열이 "size"인 경우, myqueue.size()를 사용하여 큐의 크기를 출력합니다.
- 입력 문자열이 "empty"인 경우, myqueue.empty()를 사용하여 큐가 비어 있는지 여부를 출력합니다. 이는 불리언 값 (참인 경우 1, 거짓인 경우 0)을 반환합니다.
- 입력 문자열이 "pop"인 경우, 큐가 비어 있는지 확인하고, 비어 있다면 -1을 출력합니다. 그렇지 않으면, myqueue.front()를 사용하여 큐의 맨 앞 요소를 출력한 후, myqueue.pop()을 사용하여 큐에서 제거합니다.
- 작업이 모두 완료될 때까지 루프가 계속됩니다.
- 루프가 종료되면, main() 함수가 종료되고 프로그램이 종료됩니다.
종합적으로, 이 코드는 큐를 구현하고, 요소를 추가(push), 맨 앞(front) 및 맨 뒤(back) 요소에 접근, 큐의 크기(size) 및 비어 있는지 여부(empty)를 확인하고, 맨 앞에서 요소를 제거(pop)하는 작업을 수행합니다.
2.3. #결과

큐를 잘 활용하면 프로그램의 효율성을 높일 수 있으므로, 데이터 구조 학습 과정에서 큐에 대한 이해는 필수입니다.
'프로그래밍 > C++' 카테고리의 다른 글
[Algorithm] DFS와 BFS (2) | 2023.10.11 |
---|---|
[알고리즘/C++]버블정렬Bubble Sort (1) | 2023.06.07 |
[백준/C++] 10828번 스택 (0) | 2023.05.11 |
[C++] 함수 인수 전달 방식의 차이점 이해하기 (0) | 2023.04.20 |
[C++]윈도우 API를 활용한 절대 음감 게임 (0) | 2023.04.06 |