반응형
오랜만에 스택 구현이라 어버버댔다.
한가지를 느꼈다.
C언어에서 정말.. 문자열 다루는 것은 복잡하다ㅜㅜ 자바가 정말 편해.. C언어에서 문자열 못다루는 내자신이 초라했다.
그리고 한가지 실수를 했다.
예제로 입력받는 커맨드 중 가장 긴 것이 "empty"인데, 이것을 받기 위한 배열의 최소 길이는 6인데(e m p t y \0)
5로 설정했다가 실행 오류를 한동안 못찾았다. 책에서 배운내용인데 까먹었다 ㅜㅜ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int *stk;
int size; // 스택 포인터 = 스택에 쌓여있는 데이터의 개수
} IntStack;
int Push(IntStack *s, int x) {
if(s->size > 10000)
return -1;
s->stk[s->size++] = x;
return 0; // 성공
}
int Pop(IntStack *s, int *x) {
if(s->size <= 0) {
*x = -1;
return -1;
}
*x = s->stk[--s->size];
return 0; // 성공
}
int Size(IntStack *s) {
return s->size;
}
int IsEmpty(IntStack *s) {
return (s->size <= 0);
}
int Peek(IntStack *s, int *x) {
if(s->size <= 0) {
*x = -1;
return -1;
}
*x = s->stk[s->size - 1];
return 0; // 성공
}
int N;
char input[6];
int key;
int main() {
IntStack stack;
stack.stk = calloc(10000, sizeof(int));
stack.size = 0;
scanf("%d", &N);
while(N--) {
// input배열 초기화해주는건데, 안해줘도 되더라.
memset(input, '\0', sizeof(input));
scanf("%s", input);
//strcmp는 널문자까지 비교
if(strcmp("push", input) == 0) {
scanf("%d", &key);
Push(&stack, key);
}
else if(strcmp("pop", input) == 0) {
Pop(&stack, &key);
printf("%d\n", key);
}
else if(strcmp("size", input) == 0) {
printf("%d\n", Size(&stack));
}
else if(strcmp("empty", input) == 0) {
printf("%d\n", IsEmpty(&stack));
}
else if(strcmp("top", input) == 0) {
Peek(&stack, &key);
printf("%d\n", key);
}
}
}
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 9012번 스택 활용 (2) | 2021.03.05 |
---|---|
[BaekJoon/백준] 10773번 스택 (0) | 2021.03.05 |
[BaekJoon/백준] 2004번 (0) | 2021.03.04 |
백준 게시판 개인공지 (0) | 2021.03.03 |
[BaekJoon/백준] 1676번 (0) | 2021.03.03 |