Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++
- python
- 스트림셋이란?
- 푸시푸시
- 도커 mysql
- mysql on docker
- streamsets 강의
- 도커
- 알고리즘
- java
- docker
- nvidia docker
- C언어
- 데이터베이스
- 스트림셋
- 코딩
- 데이트
- ansible install
- mysql docker
- MySQL
- 자바
- elk stack
- 클라우드
- 도커 elk
- 정보처리기사
- c
- 파이썬
- 도커 시작하기
- 앤서블 설치
- 백준
Archives
- Today
- Total
리그캣의 개발놀이터
백준 알고리즘 10828 - 스택 본문
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N이 주어진다.
둘째 줄부터 N개의 명령이 하나씩 주어진다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
소스코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <stdio.h> #include <string.h> #define MAX 10000 #define TRUE 1 #define FALSE 0 #define MINUS -1 typedef struct _stack { //스택 구조체 선언 int arr[MAX]; int top; } Stack; void StackInit(Stack *sp) { //스택 초기화 sp->top = -1; } int IsEmpty(Stack *sp) { //스택이 비웠는지 확인 if (sp->top == -1) return TRUE; return FALSE; } int IsFull(Stack *sp) { //스택이 꽉 차있는지 확인 if (sp->top + 1 >= MAX) return TRUE; return FALSE; } void push(Stack* sp,int data) { //push if (IsFull(sp) == TRUE) return; sp->arr[++(sp->top)] = data; } int pop(Stack* sp) { //pop if (IsEmpty(sp)) return MINUS; else //top이 가리키는 값을 반환 후 top을 하나 내림. return sp->arr[(sp->top)--]; } int size(Stack* sp) { //스택 사이즈 출력 return sp->top + 1; } int top(Stack* sp) { if (IsEmpty(sp)) return FALSE; return sp->arr[sp->top]; } int main() { int N,i,data; char str[6]; Stack stack; scanf_s("%d", &N); fgetc(stdin); StackInit(&stack); for (i = 0; i <= N; i++) { scanf_s("%s",str,sizeof(str)); fgetc(stdin); if (!strcmp(str, "push")) { scanf_s("%d",&data); fgetc(stdin); push(&stack, data); } else if (!strcmp(str, "pop")) { printf("%d",pop(&stack)); } else if (!strcmp(str, "size")) { printf("%d", size(&stack)); } else if (!strcmp(str, "empty")) { printf("%d", IsEmpty(&stack)); } else if (!strcmp(str, "top")) { printf("%d", top(&stack)); } } return 0; | cs |
참고 사이트 : http://blockdmask.tistory.com/96
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘 10845 - 큐 (0) | 2018.01.30 |
---|---|
백준 알고리즘 2747번 - 피보나치 수 (0) | 2018.01.30 |
백준 알고리즘 - 1152번 단어의 개수 구하기 (0) | 2018.01.18 |
백준 알고리즘 1065번 한수 (0) | 2018.01.17 |
백준 알고리즘 10989번 수 정렬하기 (2) | 2018.01.11 |
Comments