티스토리 뷰

728x90
반응형

이 문제는 스택에 대한 개념에 관한 문제이다. 스택 이론에 대해 제대로 숙지하고 있다면 크게 어려운 부분이 없다. 다만 입력을 받는 부분이 약간 까다로울 수 있다.

getchar()를 통해 입력버퍼의 문자를 1개씩 개행문자가 등장할 때까지 읽고 실행해야 할 함수를 판단한다. 주의할 점은 입력버퍼의 가장 마지막에 getchar 함수는 EOF를 출력한다는 점이다. N을 scanf로 받는다면 scanf는 개행문자를 입력받지 않으므로 &*c를 통해 개행문자를 제거하거나 잉여 getchar를 통해 개행문자를 삭제해야 정상적으로 동작하게 된다.

작성한 코드는 다음과 같다.


#include<stdio.h>
//https://ark-hive.tistory.com/

char num;
int N;

char str[100];

int stack[10020];

int top;

int j = 0;

void push(char* num) {
	int i = 0;
	int sum = 0;
	while (num[i] != '\n' && num[i] !=EOF) {
		sum = sum * 10;
		sum += num[i]-'0';
		i++;
	}
	top = top + 1;
	stack[top] = sum;
	return;
}

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

void empty() {
	if (top == 0) printf("%d\n", 1);
	else printf("%d\n", 0);
}
int main(void) {
	/*while ((num = getchar()) != '\n') {
		N = N * 10;
		N += num - '0';
	}*/
	scanf("%d%*c", &N); //개행문자 제거

	for (int i = 0; i < N; i++) {
		j = 0;
		while (1) {
			str[j] = getchar();
			if (str[j] == '\n' || str[j] == EOF) {
				break;
			}
			j++;
		}
		if (str[0] == 'p' && str[1] == 'u' && str[2] == 's' && str[3] == 'h') {
			push(&(str[5]));
		} 
		else if (str[0] == 't' && str[1] == 'o' && str[2] == 'p') {
			if (top == 0) {
				printf("%d\n", -1);
			}
			else {
				printf("%d\n", stack[top]);
			}
			
		}
		else if (str[0] == 's' && str[1] == 'i' && str[2] == 'z' && str[3] == 'e') {
			printf("%d\n", top);
		}
		else if (str[0] == 'p' && str[1] == 'o' && str[2] == 'p') {
			pop();
		}
		else if (str[0] == 'e' && str[1] == 'm' && str[2] == 'p' && str[3] == 't' && str[4] == 'y') {
			empty();
		}
	
	}
	
	return 0;
}
728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함