๋ฐฑ์ค 10828๋ฒ : https://www.acmicpc.net/problem/10845
โ ๋ฌธ์ ์ค๋ช
๋ง ๊ทธ๋๋ก ํ๋ฅผ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค.
โก ํ๋?
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ์ ์ ์ ์ถ ๊ตฌ์กฐ!
FIFO (First In First Out) ๋ก,
์๋น์ ๊ฐ์ ์ค์ ์๋ฉด ๋จผ์ ์ค์ ์ ์ฌ๋๋ถํฐ ์ฐจ๋ก๋ก ์ ์ฅํ๋ฏ์ด
๊ฐ์ฅ ๋จผ์ ๋ฃ์ ์ ๋ณด๋ถํฐ ์ฐจ๋ก๋ก ๊บผ๋ด๋ ๊ตฌ์กฐ์ด๋ค.
์๋ฅผ ๋ค์ด a -> b -> c ์์๋๋ก ๋ฃ์๋ค๋ฉด, ๋บ ๋๋ a -> b -> c ์์๋ก ๊บผ๋ด๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ฃ๋ ๊ฒ์ ‘push’, ๋นผ๋ ๊ฒ์ ‘pop’์ด๋ผ๊ณ ์นญํ๋ค.
1. ์ด๊ธฐ ์ํ (์๋ฌด๊ฒ๋ ์๋ ๊ณต๋ฐฑ ์ํ)
2. push(a) -> push(b) -> push(c)
3. pop() -> pop() -> pop()
1. push X : ์ ์ X๋ฅผ ํ์ ๋ฃ๋๋ค.
2. pop : ํ์์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ๋นผ์ ์ถ๋ ฅ (๋น์ด์๋ค๋ฉด –1 ์ถ๋ ฅ)
3. size : ํ์ ๋ค์ด์๋ ์ ์์ ๊ฐ์ ์ถ๋ ฅ
4. empty : ํ๊ฐ ๋น์ด์์ผ๋ฉด 1, ์๋๋ฉด 0 ์ถ๋ ฅ
5. front : ํ์ ๊ฐ์ฅ ์์ ์๋(๋จผ์ ๋ฃ์) ์ ์ ์ถ๋ ฅ (๋น์ด์์ผ๋ฉด –1์ถ๋ ฅ)
6. back : ํ์ ๊ฐ์ฅ ๋ค์ ์๋(๋ง์ง๋ง์ ๋ฃ์) ์ ์ ์ถ๋ ฅ (๋น์ด์์ผ๋ฉด –1 ์ถ๋ ฅ)
โ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
1. ์ ์ญ๋ณ์ idx_f, idx_b์ ์ฌ์ฉ
-1) idx_b์ ํ์ฌ ํ์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ปํ๋ฉฐ, idx_f๋ ๋งจ ์ ์ธ๋ฑ์ค๋ฅผ ๋ปํจ
-2) ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ idx_b์ 0์ด ์๋๋ผ –1๋ก ์์ํจ
2. front()
-1) empty() == 1์ด๋ฉด –1 ๋ฐํ
-2) ์๋๋ฉด queue[idx_f] (๋งจ ์์ ์๋ ๊ฐ) ๋ฐํ
3. back()
-1) empty() == 1์ด๋ฉด –1 ๋ฐํ
-2) ์๋๋ฉด queue[idx_b] (๋งจ ๋ค์ ์๋ ๊ฐ) ๋ฐํ
4. push(int x)
-1) idx_b๊ฐ -1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ +1์ ํ ํ ๊ฐ x ๋ฃ๊ธฐ
5. pop()
-1) empty() == 1์ด๋ฉด ๊ณต๋ฐฑ์ด๋ฏ๋ก –1 ๋ฐํ
-2) pop()์ ํ๋ฉด ๋งจ ์ ์ ์๋ฅผ ๊บผ๋ด๊ธฐ ๋๋ฌธ์ idx_f++
-3) ๊บผ๋ด๊ธฐ ์ ์ ์๋ฅผ ๋ฐํํด์ผ ํ๋ฏ๋ก queue[idx_f-1] ๋ฐํ
6. size()
-1) (๋ง์ง๋ง ์ธ๋ฑ์ค - ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค) + 1์ ํ๋ฉด ์ ์ฒด์ ๊ฐ์๊ฐ ๋์ด
ex) ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค = 1 ๐ ๋ง์ง๋ง ์ธ๋ฑ์ค = 3
(๋ง์ง๋ง ์ธ๋ฑ์ค – ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค = 3 - 1 = 2) โฉ 2+1 = 3
idx = 0 | idx =1 | idx = 2 | idx = 3 |
a | b | c |
7. empty()
idx_f > idx_b์ด๋ฉด ๋น์ด์๋ค๊ณ ํ๋จํจ
โ ์ฝ๋ [C์ธ์ด]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int queue[10000];
int idx = -1; // idx๋ 0๋ถํฐ ์์ํ๋๊น -1๋ก ์ค์
int first = 0; // front์ฉ
// true๊ฐ ํ์ฌ ํ๋๋ผ๋ ์๋ ์ํ, false๊ฐ ๊ณต๋ฐฑ
typedef enum {false, true} bool;
bool emp = false; // ์ด๊ธฐ์ํ๋ ๊ณต๋ฐฑ์ผ๋ก ์ฒ๋ฆฌ
void push(int x) {
idx++; // -1๋ก ์ค์ ํด์ ++ํ๊ณ ์์
queue[idx] = x;
emp = true; // ๋ญ์๋ค๊ณ ๋ฐ๊พธ๊ธฐ
}
void pop() {
if (emp == false)
printf("-1\n");
else {
printf("%d\n", queue[first]);
if (idx == first)
emp = false;
first++; // first ++
}
}
void front() {
if (emp == false) // ๋น์ด์๋ค๋ฉด
printf("-1\n");
else
printf("%d\n", queue[first]);
}
void back() {
if (emp == false) // ๋น์ด์๋ค๋ฉด
printf("-1\n");
else
printf("%d\n", queue[idx]);
}
void size() {
printf("%d\n", idx + 1 - first);
}
void empty() {
if (emp == true)
printf("0\n");
else
printf("1\n");
}
int main(void) {
int n, x;
scanf("%d", &n);
char input[6];
for (int i = 0; i < n; i++) {
scanf("%s",input);
if (!strcmp(input, "push")) {
scanf("%d", &x);
push(x);
}
else if (!strcmp(input, "pop")) {
pop();
}
else if (!strcmp(input, "size"))
size();
else if (!strcmp(input, "empty")) {
empty();
}
else if (!strcmp(input, "front")) {
front();
}
else if (!strcmp(input, "back")) {
back();
}
}
return 0;
}
https://github.com/2hyunjinn/Baekjoon/blob/6e155f58b7fdf95083d84ad5e97a3f2798bcbb55/Baekjoon_10845.c
์ ์ฝ๋๋ queue์ ์ ํํ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ธฐ ์ํด์ ํ์ด์ ๊ตฌํํด๋ณด์๋ค.
๋ง์ฝ C++์ ํตํด ์ฝ๊ฒ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์ด๋ฏธ queue๋ฅผ ๊ตฌํํด๋์ C++์ ๋ด์ฅํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
โ ์ฝ๋ [C++ ๋ด์ฅํจ์]
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
queue<int> queue;
for (int i = 0; i < n; i++) {
string word;
cin >> word;
if (word == "push") {
int x;
cin >> x;
queue.push(x);
}
else if (word == "pop") {
if (queue.empty()) cout << -1 << '\n';
else {
cout << queue.front() << '\n';
queue.pop();
}
}
else if (word == "size") {
cout << queue.size() << '\n';
}
else if (word == "empty") {
cout << queue.empty() << '\n';
}
else if (word == "front") {
if (queue.empty()) cout << -1 << '\n';
else cout << queue.front() << '\n';
}
else if (word == "back") {
if (queue.empty()) cout << -1 << '\n';
else cout << queue.back() << '\n';
}
}
return 0;
}
'๐ STUDY > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C / C++] ๋ฐฑ์ค 1244๋ฒ - ์ค์์น ์ผ๊ณ ๋๊ธฐ (1) | 2022.04.17 |
---|---|
[C / C++] ๋ฐฑ์ค 1748๋ฒ - ์ ์ด์ด ์ฐ๊ธฐ 1 (1) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 10828๋ฒ - ์คํ(Stack) (0) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 10872๋ฒ - ํฉํ ๋ฆฌ์ผ (0) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 5086๋ฒ - ๋ฐฐ์์ ์ฝ์ (0) | 2022.03.21 |