반응형
가장 최근에 쓴 수를 지워야 하는 문제. 즉 스택이 필요한 문제였다.
일단 정석으로 스택을 구현해서 풀어봤다.
#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 >= 100000)
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 Add_All(IntStack *s) {
int result = 0;
for(int i = 0; i < s->size; i++) {
result += s->stk[i];
}
return result;
}
int N;
char input[6];
int key;
int main() {
IntStack stack;
stack.stk = calloc(100000, sizeof(int));
stack.size = 0;
scanf("%d", &N);
while(N--) {
scanf("%d", &key);
if(key == 0)
Pop(&stack, &key);
else
Push(&stack, key);
}
printf("%d", Add_All(&stack));
}
코드가 좀 길다.
그래서 이를 간략하게 구현해봤다.
#include <stdio.h>
int stack[100000];
int size;
void push(int a) {
stack[size++] = a;
}
int pop() {
return stack[--size];
}
int main() {
int N;
int input;
int result = 0;
scanf("%d", &N);
for(int i = 0; i < N; i++) {
scanf("%d", &input);
if(input == 0)
pop();
else
push(input);
}
for(int i = 0; i < size; i++) {
result += stack[i];
}
printf("%d", result);
}
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 4949 스택 활용 (0) | 2021.03.06 |
---|---|
[BaekJoon/백준] 9012번 스택 활용 (2) | 2021.03.05 |
[BaekJoon/백준] 10828 스택 구현 (0) | 2021.03.05 |
[BaekJoon/백준] 2004번 (0) | 2021.03.04 |
백준 게시판 개인공지 (0) | 2021.03.03 |