백준 알고리즘 - 10828번 스택 문제입니다.
(참고 - https://www.acmicpc.net/problem/10828 )
코드)
#include <stdio.h>
#include <string.h>
int stack[10000];
int main() {
int N, i, j, num, top=0;
scanf("%d", &N);
for(i=0; i<N; i++) {
char cmd[BUFSIZ];
scanf("%s", cmd);
if(strcmp(cmd, "push") == 0) {
scanf("%d", &num);
stack[top] = num;
top++;
}
if(strcmp(cmd, "pop") == 0) {
if(top <= 0)
printf("-1\n");
else {
printf("%d\n", stack[top-1]);
top--;
}
}
if(strcmp(cmd, "size") == 0) {
printf("%d\n", top);
}
if(strcmp(cmd, "empty") == 0) {
if(top <= 0)
printf("1\n");
else
printf("0\n");
}
if(strcmp(cmd, "top") == 0) {
if(top <= 0)
printf("-1\n");
else
printf("%d\n", stack[top-1]);
}
}
return 0;
}
- 문제에 맞게 C로 스택함수를 직접 구현해주면 되는 부분입니다.
다른 부분은 생략하고, 각 명령부분들만 살펴보도록 하겠습니다.
먼저 입력받은 문자열 cmd가 PUSH인지 아닌지 파악하기 위해 문자열 비교함수인 strcmp를 이용하여 push와 비교를 하고, push일 경우 숫자도 함께 입력받도록 하여 배열 stack의 인덱스 top에 넣어주고, top은 1 증가시켜줍니다.
입력받은 문자열이 POP이라면, top의 인덱스를 먼저 비교하여 0보다 작거나 같을 시에는 stack에 아무 값도 현재 들어가있지 않다는 것을 의미하므로 문제의 조건에 따라 -1을 출력하고, top이 0보다 클 경우 값이 있다는 것이므로 stack의 인덱스 top-1의 값을 출력한 뒤, top을 1 감소시켜줍니다.
입력받은 문자열이 size라면, top을 출력해줍니다.(인덱스 top이 곧 stack의 size를 가리키므로)
입력받은 문자열이 empty라면, top의 값을 비교하여 0 또는 1을 출력해줍니다.
입력받은 문자열이 top이라면, top의 값을 비교하여 0 또는 stack의 인덱스 top-1 (가장 위에 있는 값 = 가장 마지막에 push된 값)을 출력해줍니다.
'Programming > Algorithm' 카테고리의 다른 글
정렬들(Selection, Insertion, Bubble, Quick, Merge, Heap, Radix) 비교 (1) | 2017.01.07 |
---|---|
알고리즘 문제들과 관련하여 (0) | 2016.09.21 |
백준 알고리즘 - 10817번 : 세 수 (1) | 2016.05.14 |
백준 알고리즘 - 10808번 : 알파벳 개수 (3) | 2016.05.14 |
백준 알고리즘 - 10798번 : 세로읽기 (0) | 2016.05.14 |
WRITTEN BY