

https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
풀이
#include <stdio.h>
#include <string.h>
int main() {
int n, x; // n= 명령횟수, x = push X의 X해당
char command[6]; // 명령어
int stack[10001] = {}; // 스택에 대한 배열
scanf("%d", &n); // 명령 횟수 입력
// i = 초기값, j = 인덱스값
int i = 0, j = -1;
while (i < n) {
scanf("%s", command); // 명령어 입력
// 입력한 명령어가 "push"일 때
if (!strcmp(command, "push")) {
j++; // 인덱스 +1
scanf("%d", &x); // push X
stack[j] = x; // 스택에 x 입력
}
// 입력 명령어가 pop일 때
else if (!strcmp(command, "pop")) {
// 인덱스가 0이상일 때 (-1이 아닐 때)
if (j >= 0) {
// j에 따른 값 출력
printf("%d\n", stack[j]);
// 인덱스를 -1 함으로써 pop 기능구현
j--;
}
// -1일 때 (스택이 비어있음)
else {
printf("-1\n");
}
}
// 입력 명령어가 "size"일 때
else if (!strcmp(command, "size")) {
// 배열의 인덱스는 0부터 시작하므로
// 스택 배열의 길이는 인덱스값+1
printf("%d\n", j + 1);
}
// 입력 명령어가 "empty"일 때
else if (!strcmp(command, "empty")) {
// 인덱스가 0이상일 때 (-1이 아닐 때)
if (j >= 0)
printf("0\n");
// 인덱스가 -1일 때
else
printf("1\n");
}
else if (!strcmp(command, "top")) {
// 인덱스가 0이상일 때 (-1이 아닐 때)
if (j >= 0) {
printf("%d\n", stack[j]);
}
// 인덱스가 -1일 때
else
printf("-1\n");
}
i++;
}
return 0;
}
j값을 -1로 잡는 이유 :
스택 배열은 처음에 초기화 상태여야 한다. j는 인덱스 값이므로 -1일 때 스택 배열은 초기화임을 나타낼 수 있다.
strcmp() 함수 :
strcmp()함수는 문자열 비교 함수다. 먼저 <string.h> 헤더파일을 불러와야 한다.
strcmp(문자열1, 문자열2) ==
0 일때 문자열1과 2가 같다.
-1 일때 문자열1이 2보다 크다.
1 일때 문자열1이 2보다 작다.
'코딩 > 백준 문제 (실버)' 카테고리의 다른 글
[백준/18352/파이썬] 특정 거리의 도시 찾기 _ 풀이 (0) | 2024.03.04 |
---|---|
[백준/10773/C언어] 제로 _ 풀이 (0) | 2023.09.21 |
[백준/28278/C언어] 스택 2 _ 풀이 (2) | 2023.09.20 |
[백준/11651/C언어] 좌표 정렬하기 2 _ 풀이 (0) | 2023.09.12 |
[백준/1427/C언어] 소트인사이드 _ 풀이 (0) | 2023.09.12 |