코테 스터디를 시작한 지도 벌써 2주가 다 되어가네요. 시간이 참 빠른 것 같아요. 오늘도 파이팅입니다!
문제 설명
오늘의 문제는 말그대로 큐를 구현해 보는 문제였습니다. 직접 구현을 해보면서 '큐'라는 자료구조에 대해 알아볼 수 있는 문제였습니다.
생각 흐름
음.. 이 문제는 '큐'라는 자료구조를 다시 떠올릴 수 있었던 문제였던 것 같습니다.
'큐'라는 자료구조는 대표적인 선입선출(FIFO) 알고리즘으로, push pop empty front back swap 등의 기본함수가 있다는 것을 떠올렸던 것 같아요.
예전에 배운 '스택'과 다른점은 front와 back 원소에 접근할 수 있다는 점을 기억해 냈죠.
<queue> 헤더파일을 include 해주고 각 함수마다 q의 기능들을 적어줬어요.
큐는 자료가 저장되어서 front부터 나온다는 점을 살려 각 함수를 알맞게 구현해 주었습니다.
큐가 비어있으면 1을 출력해 주는 empty() 함수도 각 함수마다 달아주어 예외처리도 해주며 마무리했습니다.
#include <iostream>
#include <queue>
using namespace std;
queue <int> q;
int main () {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
if (s == "push") {
int j;
cin >> j;
q.push(j);
}
else if (s == "pop") {
if (q.empty()) {
cout << -1 << "\n";
}
else {
cout << q.front() << "\n";
q.pop();
}
}
else if (s == "front")
{
if (q.empty())
cout << -1 << '\n';
else
cout << q.front() << '\n';
}
else if (s == "back")
{
if (q.empty())
cout << -1 << '\n';
else
cout << q.back() << '\n';
}
else if (s == "size")
{
cout << q.size() << '\n';
}
else if (s == "empty")
{
cout << q.empty() << '\n';
}
}
return 0;
}
공부한 내용 정리
📌1. 큐
큐(Queue)는 대표적인 FIFO(First In First Out) 구조입니다.
따라서 제일 처음에 넣은 데이터가 처음으로 빠져나오는 것을 볼 수 있습니다.
큐의 기본함수에는 push, pop, empty, front, back, swap 등이 있습니다.
스택과 달리 front 원소와 back 원소에 접근할 수 있다는 점이 특징입니다.
📌2. 큐 헤더 파일
Queue STL을 사용하기 위해서는 헤더파일을 포함해야 합니다.
queue <데이터 타입> 이름 ; 으로 queue을 선언합니다.
#include <queue> queue<int> q;
📌3. 큐 기본 함수
▷ 큐에 데이터 추가하기
큐이름. push(데이터) 형태로 데이터를 추가합니다.
queue.push(element)
▷ 큐에 데이터 삭제하기
큐이름. pop( ) 형태로 큐의 front 데이터를 삭제합니다.
queue.pop()
▷ 큐의 첫 번째 데이터 반환
큐이름. front() 형태로 제일 최상위 데이터를 반환합니다.
queue.front()
▷ 큐의 마지막 데이터 반환
큐이름. back() 형태로 제일 마지막 데이터를 반환합니다.
queue.back()
▷ 큐의 사이즈 반환
큐이름. size() 형태로 큐의 현재 사이즈를 반환합니다.
queue.size()
▷ 큐가 비어있는지 확인
큐이름. empty() 형태로 큐가 비어있는지 확인합니다.
queue.empty()
▷ 큐 SWAP : 두 큐의 내용 바꾸기
큐 1과 큐 2 두 큐의 내용을 바꾸고 싶은 경우, 내장된 swap 함수를 사용합니다.
swap(큐 1 이름, 큐 2 이름) 형태로 두 큐의 내용을 바꿉니다.
swap(queue1 , queue2)
▷ 큐 기본 사용법 예시
1. 큐 q1 에는 1, 2, 3 데이터를 queue.push(element) 함수를 사용해 삽입했습니다.
2. 큐 q2 에는 10, 20,30 데이터를 queue.push(element) 함수를 사용해 삽입했습니다.
3. 큐 q1와 큐 q2를 바꾸어주었습니다.
4. 큐가 비어있을 때까지 queue.front 데이터를 출력하며 pop 해주었습니다.
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
queue<int> q1;
queue<int> q2;
q1.push(1);
q1.push(2);
q1.push(3);
q2.push(10);
q2.push(20);
q2.push(30);
swap(q1, q2);
while (!q1.empty()) {
cout << q1.front() << endl;
q1.pop();
}
return 0;
}
출력결과는 다음과 같습니다. 10 20 30 이 출력이 되었습니다.
q1에는 1,2,3 데이터를 넣었지만, q2와 SWAP 되어 10 20 30 데이터가 저장된 것을 볼 수 있습니다.
10 20 30
출처: 코딩젤리 블로그
깔끔하게 정리를 잘해주셨더라고요. 꼼꼼히 읽어보면서 코드도 다시 구현해 보았습니다.
'코테 > 항해99' 카테고리의 다른 글
[99클럽 코테 스터디 16일차 TIL] #스택/ 큐 5 (1) | 2024.11.12 |
---|---|
[99클럽 코테 스터디 15일차 TIL] #스택/ 큐 4 (2) | 2024.11.11 |
[99클럽 코테 스터디 13일차 TIL] #스택/큐 2 (0) | 2024.11.10 |
[99클럽 코테 스터디 12일차 TIL] #스택/ 큐 1 (0) | 2024.11.09 |
[99클럽 코테 스터디 11일차 TIL] #해시7 (0) | 2024.11.07 |