티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 28278번 스택 2

https://www.acmicpc.net/problem/28278

 

28278번: 스택 2

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다.

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

정수를 저장하는 스택을 구현하여 주어진 5가지 명령(push, pop, len, isEmpty, top)을 처리

 

2. 풀이

기본적인 stack 자료 구조 문제입니다.

stack 특성에 따라 LIFO(Last In First Out)으로 구조를 만들면 됩니다.

 

단순하게 배열의 마지막 index를 기억한 뒤 넣고 빼게 하도록 만들었습니다.

size 확인 시 비교 연산자(>=, == 등)를 쓰지 않기 위해 0 base가 아닌 1 base로 구현했습니다.

 

입력이 최대 999,999개 주어질 수 있으므로 배열의 크기는 최소 1,000,000이어야 합니다.

(출력을 요구하는 명령이 하나 이상 주어지므로, 명령 1(push)은 최대 999,999번)

(그리고 1 base이므로 +1)

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
28278_스택
5020KB	232ms
*/
#include <cstdio>

const int LM = 1000000;
int st[LM], size, n, op, x;

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	scanf("%d", &n);
	while (n--) {
		scanf("%d", &op);
		switch (op) {
		case 1:
			scanf("%d", &x);
			st[++size] = x;
			break;
		case 2:
			if (size) printf("%d\n", st[size--]);
			else printf("-1\n");
			break;
		case 3:
			printf("%d\n", size);
			break;
		case 4:
			if (!size) printf("1\n");
			else printf("0\n");
			break;
		case 5:
			if (size) printf("%d\n", st[size]);
			else printf("-1\n");
			break;
		}
	}
	return 0;
}
728x90
반응형
댓글