Skip to content

Latest commit

ย 

History

History
162 lines (126 loc) ยท 4.74 KB

File metadata and controls

162 lines (126 loc) ยท 4.74 KB

์Šคํƒ(stack)

1 ์Šคํƒ์ด๋ž€?

-์Šคํƒ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

-ํ•œ ์ชฝ ๋์—์„œ๋งŒ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ณ , ๋บผ ์ˆ˜ ์žˆ๋‹ค.

-๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ์ž๋ฃŒ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋น ์ง„๋‹ค.(FILO(First In Last Out)/LIFO(Last In First Out))

-๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ์ž‘์ž…์„ push, ๋นผ๋Š” ์ž‘์—…์„ pop์ด๋ผ ํ•œ๋‹ค.

-์‰ฝ๊ฒŒ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ํ•œ์ชฝ์ด ๋ง‰ํžŒ ์›ํ†ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2 ์Šคํƒ์˜ ์—ฐ์‚ฐ

์Šคํƒ์€ LIFO(Last In First Out) ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ๋œ๋‹ค.

-push(item): item ํ•˜๋‚˜๋ฅผ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ—๋ถ€๋ถ„์— ๋„ฃ๋Š”๋‹ค.

-pop(): ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

์Šคํƒ1

์ถœ์ฒ˜ https://monsieursongsong.tistory.com/4

-top(): ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ(์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š”) ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•œ๋‹ค.

-size(): ์Šคํƒ์— ๋ช‡๊ฐœ์˜ ์ž๋ฃŒ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

-empty(): ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€, ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋‹ค.(์ด ๋•Œ ๋น„์–ด์žˆ์œผ๋ฉด 1์„ ๋ฐ˜ํ™˜, ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜)

3 ์Šคํƒ์˜ ๊ตฌํ˜„

์Šคํƒ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

๊ทธ ์ค‘ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ๋ฐฐ์—ด(array)์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์œ„์— ์ฒจ๋ถ€๋œ ์‚ฌ์ง„์„ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์Šคํƒ์„ ๊ธฐ์šธ์ด๋ฉด ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์Šคํƒ์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

๊ตฌํ˜„ํ•  ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ: ๋ฐฐ์—ด(+์ตœ๋Œ€ํฌ๊ธฐ), top๋ณ€์ˆ˜(๋ฐ‘์— ์ฝ”๋“œ์—์„œ๋Š” topํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ idx๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ), ๊ฐ์ข… ํ•จ์ˆ˜

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ์ด๋‹ค.

#include <stdio.h>
#include <string.h>

int idx = 0; //์•ž์—์„œ ๋งํ•œ top๋ณ€์ˆ˜
int stack[10002]; //๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์Šคํƒ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰๋งŒํผ ์žก์•„์ค˜์•ผํ•œ๋‹ค.

void push(int n) {
	stack[idx++] = n;
	return;
}

void pop() {
	if (idx != 0)
		printf("%d\n", stack[--idx]);
	else
		printf("-1\n");
	return;
}

void top() {
	if (idx != 0)
		printf("%d\n", stack[idx - 1]);
	else
		printf("-1\n");
}
void empty() {
	if (idx == 0)
		printf("1\n");
	else
		printf("0\n");
}

int main() {
	int N, data;
	char order[8];
	scanf("%d", &N);

	while (N--) {
		scanf("%s", order);
		if (strcmp(order, "push") == 0) {
			scanf("%d", &data);
			push(data);
		}
		else if (strcmp(order, "pop") == 0) {
			pop();
		}
		else if (strcmp(order, "size") == 0)
			printf("%d\n", idx);
		else if (strcmp(order, "top") == 0)
			top();
		else if (strcmp(order, "empty") == 0)
			empty();
	}
}

p.s. pop()ํ•จ์ˆ˜์—์„œ data๋ฅผ ๋บ„ ๋•Œ ๊ตณ์ด ๋ฐฐ์—ด์—์„œ data๋ฅผ ์ œ๊ฑฐํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ƒฅ idx๋งŒ ์ค„์—ฌ์ฃผ๋ฉด ์ธ์‹์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

4 ์Šคํƒ ํ™œ์šฉ(c++/stl์‚ฌ์šฉ)

c++์—์„œ๋Š” stack์„ ์ผ์ผํžˆ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. stdio์ฒ˜๋Ÿผ ์ด๋ฏธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ—ค๋”ํŒŒ์ผ์€ #include <stack>์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด๋œ๋‹ค.

์ด ๋•Œ c++ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ ์ค„์„ ๋” ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋ฐ‘์— ์ „์ฒด ์ฝ”๋“œ์—์„œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋˜ํ•œ stack์„ ๋งŒ๋“œ๋ ค๋ฉด intํ˜• ๋ณ€์ˆ˜, charํ˜• ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ stack์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค. stack<์›ํ•˜๋Š” ์ž๋ฃŒํ˜•> ์›ํ•˜๋Š” ๋ณ€์ˆ˜์ด๋ฆ„;์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ

ํ•˜๋‚˜์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค์ž๋ฉด stack์•ˆ์— intํ˜• ์ž๋ฃŒ๋งŒ ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ, stack๋ณ€์ˆ˜ ์ด๋ฆ„์„ s๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ stack<int> s;์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ stackํ—ค๋”์— ์žˆ๋Š” push, pop๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด "stack๋ณ€์ˆ˜์ด๋ฆ„.์›ํ•˜๋Š” ํ•จ์ˆ˜"์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” c++์— ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” stack๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(stl) ์‚ฌ์šฉํ•ด ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std; //์ด ๋ถ€๋ถ„์ด c++ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ผญ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•˜๋Š” ์ค„์ด๋‹ค

stack<int> s;

int main() {
	int N, data;
	char order[8];
	scanf("%d", &N);

	while (N--) {
		scanf("%s", order);
		if (strcmp(order, "push") == 0) {
			scanf("%d", &data);
			s.push(data);
		}
		else if (strcmp(order, "pop") == 0) {
			if(s.empty())
				printf("-1\n");
			else{
				printf("%d\n", s.top());
				s.pop();
			}
		}
		else if (strcmp(order, "size") == 0)
			printf("%d\n", s.size());
		else if (strcmp(order, "top") == 0){
			if(s.empty())
				printf("-1\n");
			else{
				printf("%d\n", s.top());
			}
		}
		else if (strcmp(order, "empty") == 0)
			printf("%d\n", s.empty());
	}
	return 0;
}