๋ฐฑ์ค 10828๋ฒ : https://www.acmicpc.net/problem/10828
โ ๋ฌธ์ ์ค๋ช
๋ง๊ทธ๋๋ก ์คํ์ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค.
โก ์คํ์ด๋?
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ์ ๊ตฌ์ ์ถ๊ตฌ๊ฐ ๊ฐ์ ๊ตฌ์กฐ!
LIFO (Last In First Out) ๋ก,
์ ์๋ฅผ ์์ผ๋ฉด ๋งจ ์์ ๋์ธ(๋งจ ๋ง์ง๋ง์ ๋์) ์ ์๋ถํฐ ๋นผ๋ ๊ฒ์ฒ๋ผ
๊ฐ์ฅ ๋์ค์ ๋ฃ์ ์ ๋ณด๋ฅผ ๋จผ์ ๊บผ๋ด๋ ๊ตฌ์กฐ์ด๋ค.
์๋ฅผ ๋ค์ด a -> b -> c ์์๋๋ก ๋ฃ์๋ค๋ฉด, ๋บ ๋๋ c -> b -> a ์์๋ก ๊บผ๋ด๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋ฃ๋ ๊ฒ์ ‘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. top : ์คํ ๊ฐ์ฅ ์์ ์๋ ์ ์ ์ถ๋ ฅ, ๋น์ด์์ผ๋ฉด –1 ์ถ๋ ฅ
โ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
1. ์ ์ญ๋ณ์ idx๋ฅผ ์ฌ์ฉ
-1) ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ 0์ด ์๋๋ผ –1์ด ๋น์ด์๋ ์ํ์
-2) ๋ฐ๋ผ์ ์ด๊ธฐ์ํ๋ –1๋ก ์์ํ๋๋ก ์ค์
2. top()
-1) idx๊ฐ –1์ด๋ฉด ๊ณต๋ฐฑ์ด๋ฏ๋ก –1 ๋ฐํ
-2) ์๋๋ฉด stack[idx] (๋งจ ์์ ์๋ ๊ฐ) ๋ฐํ
3. push(int x)
-1) idx๊ฐ –1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ๋จผ์ idx++์ ํ์ฌ 0์ผ๋ก ๋ง๋ค๊ณ ,
-2) stack[idx]์ x ์ ์ฅ
4. pop()
-1) idx๊ฐ –1์ด๋ฉด ๊ณต๋ฐฑ์ด๋ฏ๋ก –1 ๋ฐํ
-2) pop()์ ํ๋ฉด ๋งจ ์ ์ ์ ํ๋๋ฅผ ์์ ๋ ๊ฒ์ด๋ฏ๋ก idx--
-3) ์์ ๊ธฐ ์ ์ ์๋ฅผ ๋ฐํํด์ผ ํ๋ฏ๋ก stack[idx+1] ๋ฐํ
5. size()
-1) idx๋ –1๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ +1ํ ๊ฐ์ด ํ์ฌ ์คํ์ ๋ค์ด์๋ ์ ์์ ๊ฐ์
6. empty()
-1) idx == -1 ๊ณต๋ฐฑ
-2) idx > -1 ๊ณต๋ฐฑ X
โ ์ฝ๋ [C์ธ์ด]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int stack[10001];
/* ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ์ -1 */
int idx = -1;
/* top */
// idx๊ฐ -1์ด๋ฉด ๊ณต๋ฐฑ, ์๋๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ๋ฃ์ ๊ฐ ๋ฐํ
int top() {
if (idx == -1)return -1;
return stack[idx];
}
/* push */
// ์ธ๋ฑ์ค +1 ํ ํ stack ๋ฐฐ์ด์ x ๋ฃ๊ธฐ
void push(int x) {
idx++;
stack[idx] = x;
}
/* pop */
// ๋ฐฐ์ด์ด ๊ณต๋ฐฑ ์ํ๋ฉด -1 ๋ฐํ, ์๋๋ฉด ์ธ๋ฑ์ค -1 ํ ํ ๊ฐ ๋ฐํ
int pop() {
if (idx == -1) return -1;
idx--;
return stack[idx + 1]; // idx-- ํ๊ธฐ ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ฏ๋ก idx+1
}
/* size */
// ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ +1 ํ ๊ฐ ๋ฐํ
int size() {
return (idx + 1);
}
/* empty */
// -1์ด๋ฉด ๊ณต๋ฐฑ, ์๋๋ฉด 0๋ฐํ
int empty() {
if (idx == -1) return 1;
else return 0;
}
int main(void) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
char word[6];
scanf("%s", word);
if (strcmp(word, "push") == 0) {
int x;
scanf("%d", &x);
push(x);
}
else if (strcmp(word, "pop") == 0)
printf("%d\n", pop());
else if (strcmp(word, "size") == 0)
printf("%d\n", size());
else if (strcmp(word, "empty") == 0)
printf("%d\n", empty());
else if (strcmp(word, "top") == 0)
printf("%d\n", top());
}
return 0;
}
https://github.com/2hyunjinn/Baekjoon/blob/5de6d97106efeab2a84bb5180c268dac01d2115e/Baekjoon_10828.c
์ ์ฝ๋๋ stack์ ์ ํํ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ธฐ ์ํด์ ํ์ด์ ๊ตฌํํด๋ณด์๋ค.
๋ง์ฝ C++์ ํตํด ์ฝ๊ฒ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์ด๋ฏธ stack์ ๊ตฌํํด๋์ C++์ ๋ด์ฅํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
โ ์ฝ๋ [C++ ๋ด์ฅํจ์]
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
stack<int> stack;
for (int i = 0; i < n; i++) {
string word;
cin >> word;
if (word == "push") {
int x;
cin >> x;
stack.push(x);
}
else if (word == "pop") {
if (stack.empty()) cout << -1 << '\n';
else {
cout << stack.top() << '\n';
stack.pop();
}
}
else if (word == "size") {
cout << stack.size() << '\n';
}
else if (word == "empty") {
cout << stack.empty() << '\n';
}
else if (word == "top") {
if (stack.empty()) cout << -1 << '\n';
else cout << stack.top() << '\n';
}
}
return 0;
}
'๐ STUDY > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C / C++] ๋ฐฑ์ค 1748๋ฒ - ์ ์ด์ด ์ฐ๊ธฐ 1 (1) | 2022.03.21 |
---|---|
[C / C++] ๋ฐฑ์ค 10845๋ฒ - ํ(Queue) (0) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 10872๋ฒ - ํฉํ ๋ฆฌ์ผ (0) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 5086๋ฒ - ๋ฐฐ์์ ์ฝ์ (0) | 2022.03.21 |
[C / C++] ๋ฐฑ์ค 2884๋ฒ - ์๋์๊ณ (0) | 2022.03.21 |