2023. 3. 2. 16:27ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/18258
18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
접근 방법 - 큐를 이용한 기본 문제
백준의 18258번 문제는 큐 자료구조를 이용하여 해결해야 하는 기본적인 문제이다.
해당 문제는, 입력으로 주어지는 명령문에 따라 큐의 원리를 이용하여 가동하며 알맞게 출력을 수행해야 하는 문제이다.
해당 문제와 거의 같은 문제에 대해 이전에 필자가 작성한 풀이 글이 있는데, 이 링크를 아래에 기재해 본다.
https://smary-it.tistory.com/79
[백준 BOJ] 10845번 큐 (C++/cpp)
문제 설명 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나
smary-it.tistory.com
위 링크에는 풀이가 별로 없는데, 위에서 성공한 코드를 자세히 보면 여기에 올라온 코드와 똑같은 코드가 있을 것이다.
그렇다, 위 문제를 풀어본 사람이라면 그 코드를 그대로 복사 붙여넣기 하면 해결될 문제라는 것이다. (...)
그래서 부연 설명은 크게 하지 않았지만, 위 문제에서 큐에 대한 설명이 너무 없었기 때문에 cpp의 큐 함수에 대해서 아래에 간략히 적어보았다.
혹여나 큐를 처음 접해본다면, 아래의 설명과 코드를 참고해 보길 바란다.
큐와 관련된 함수 (C++/cpp)
- push() : 큐에 특정 값을 넣는 함수
- pop() : 큐의 front 값을 큐에서 빼내는 함수
- size() : 현재 큐의 크기를 반환하는 함수
- empty() : 큐가 비어있는지에 대한 여부를 반환하는 함수 (비어있으면 1(true), 아니라면 0(false) 반환)
- front() : 큐에서 가장 앞에 있는 값을 반환하는 함수 (가장 늦게 큐에 들어간 값을 반환하는 함수)
- back() : 큐에서 가장 뒤에 있는 값을 반환하는 함수 (가장 최근에 큐에 들어간 값을 반환하는 함수)
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <queue>
#include <string>
#define endl '\n'
using namespace std;
//백준 18258번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
queue<int> q;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string ch;
cin >> ch;
if (ch == "push") {
int num; cin >> num;
q.push(num);
}
else if (ch == "pop") {
if (q.empty()) { cout << -1 << endl; }
else {
cout << q.front() << endl;
q.pop();
}
}
else if (ch == "size") {
cout << q.size() << endl;
}
else if (ch == "empty") {
if (q.empty()) { cout << 1 << endl; }
else { cout << 0 << endl; }
}
else if (ch == "front") {
if (q.empty()) { cout << -1 << endl; }
else {
cout << q.front() << endl;
}
}
else if (ch == "back") {
if (q.empty()) { cout << -1 << endl; }
else {
cout << q.back() << endl;
}
}
}
}
제출 결과
(2023.01.16 백준 18258번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 27866번 문자와 문자열 (C++/cpp) (0) | 2023.03.23 |
---|---|
[백준 BOJ] 10156번 과자 (C++/cpp) (0) | 2023.03.06 |
[백준 BOJ] 9713번 Sum of Odd Sequence (C++/cpp) (0) | 2023.03.02 |
[백준 BOJ] 18398번 HOMWRK (C++/cpp) (0) | 2023.02.28 |
[백준 BOJ] 1697번 숨바꼭질 (C++/cpp) (0) | 2023.02.27 |