일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스sql
- 다이나믹프로그래밍
- 수학
- 백준알고리즘
- C++
- 구현
- 논문리뷰
- Image Classification
- C언어
- 이분탐색
- 프로그래머스
- SQL
- 큐
- 해시를사용한집합과맵
- 브루트포스알고리즘
- 정수론
- 문자열
- C
- 그리디알고리즘
- 백준
- 프로그래머스코딩테스트
- 그리디
- 이진탐색
- 프로그래머스연습문제
- MySQL
- 사칙연산
- 자료구조
- 정렬
- 소수판정
- 논문구현
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 백준 10845번 큐 본문
1. 문제이해
명령어의 개수(N)와 명령어들을 입력받아 주어진 명령어들을 처리하는 알고리즘을 구현하는 것이 목표이다.
2. 문제풀이
문제 그대로 큐를 구현하면 되는 문제이다.
큐의 본래 명령어들과도 동일하기 때문에, 그대로 구현해주면 된다.
그전에 큐에 대해 살짝 알아보도록 하자.
큐란, 후입선출 구조의 스택과는 달리 선입선출 구조를 가지는 자료구조이다.
제일 먼저 넣은 데이커가 가장 먼저 나오게 되며, 큐의 가장 앞을 front, 뒤를 back이라고 한다.
큐의 구조는 다음과 같다.
큐 또한 스택처럼 C++자동적으로 구현이 되어있다. (<queue>)
큐의 기본적인 함수들은 다음과 같다.
1. queue <데이터타입> 이름; 형태로 선언해준다.
ex) queue <int> q;
2. q.push(element);
: 큐에 element(원소)를 추가한다. (가장 뒷부분에 추가)
3. q.pop();
: 큐의 원소를 삭제한다. (가장 앞의 원소를 삭제)
4. q.size();
: 큐의 사이즈를 반환한다.
5. q.empty();
: 큐가 비어있는지를 확인한다.
: 비어있으면 true, 아니면 false를 반환한다.
6. q.front();
: 큐의 가장 앞에 있는 원소를 반환한다. (가장 오래된 원소)
7. q.back();
: 큐의 가장 뒤에 있는 원소를 반환한다. (가장 최근의 원소)
3. 소스코드
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q; // 큐
int N; // 명령어의 개수
string command; // 명령어
int num; // push시, 큐에 저장될 정수
int result = 0; // 각 명령어의 결과값
cin >> N;
for (int i = 0; i < N; i++) {
cin >> command;
// 1. push
if (command == "push") {
cin >> num;
q.push(num); // num을 큐에 저장
}
// 2. pop
else if (command == "pop") {
if (q.size() == 0) { // 큐가 비어있으면
result = -1; // -1 출력
cout << result << endl;
}
else {
result = q.front(); // 아니라면 가장 앞의 값 출력
cout << result << endl;
q.pop(); // 출력후 pop
}
}
// 3. size
else if (command == "size") {
cout << q.size() << endl;
}
// 4. empty
else if (command == "empty") {
if (q.size() == 0) { // 큐가 비어있으면 1 출력
result = 1;
cout << result << endl;
}
else { // 큐가 비어있지않으면 0 출력
result = 0;
cout << result << endl;
}
}
// 5. front
else if (command == "front") {
if (q.size() == 0) { // 큐가 비어있으면
result = -1; // -1 출력
cout << result << endl;
}
else {
result = q.front(); // 아니라면, front값 출력
cout << result << endl;
}
}
// 6. back
else if (command == "back") {
if (q.size() == 0) { // 큐가 비어있으면
result = -1; // -1 출력
cout << result << endl;
}
else {
result = q.back(); // 아니라면, back값 출력
cout << result << endl;
}
}
}
return 0;
}
명령어의 개수(N)를 입력받은 후, N만큼 for문을 반복한다.
for문 안에는 각각의 큐의 함수들이 구현되어있으며,
명령어(command)가 무엇이냐에 따라 다른 작업을 수행한다.
1. push의 경우, 원소를 하나 더 입력받아 해당 원소를 큐에 삽입한다.
2. pop의 경우, 큐가 비어있으면 -1을 반환하고 그렇지 않으면 front를 반환 후, pop해주었다.
3. size는 큐의 사이즈를 바로 출력해주었고,
4. empty는 size함수를 이용해, 큐가 비어있으면 1, 아니면 0을 출력하도록 했다.
5. front, 6.back 또한 큐가 비어있으면 -1을 출력하고, 그렇지 않으면 각각의 값을 출력했다.
그냥 내장 함수를 이용해 큐를 구현해주면 되는 간단한 문제였다.
주말이니까.. 쉬운걸로 골라보았다..
한 주를 또 보냈으니, 일요일 하루 푹 쉬고 다음주부터는 다시 화이팅해야지😊
'코딩테스트 > 📗 백준 (BOJ)' 카테고리의 다른 글
[C++] 백준 20044번 Project Teams (0) | 2021.09.01 |
---|---|
[C++] 백준 2217번 로프 (0) | 2021.08.30 |
[C++] 백준 20300번 서강근육맨 (0) | 2021.08.27 |
[C++] 백준 11508번 2+1 세일 (0) | 2021.08.26 |
[C++] 백준 2847번 게임을 만든 동준이 (0) | 2021.08.25 |