newmin
개발 이것저것
newmin
전체 방문자
오늘
어제
  • 전체 보기
    • Language
      • C
      • Java
    • Algorithm
      • Problem Solving
    • Dev
      • 개발일기장
      • Android
      • Spring
      • 회고록
    • Github
    • IDE
      • eclipse
      • visual studio 2019
    • 대외활동
      • 사피엔스4.0 대학생 서포터즈
      • 코드클럽 SW교육기부단
      • 한국대학생IT경영학회 KUSITMS

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드클럽 SW교육기부단
  • eclipse
  • KB디지털멘토링
  • 이클립스에러
  • 큐시즘
  • SW교육기부
  • SW교육기부단
  • 프로그래밍
  • C언어기초
  • 이클립스
  • 자바
  • 코드클럽
  • 백준C언어
  • C언어알고리즘
  • 사피엔스4.0 서포터즈
  • 대학생 서포터즈
  • BOJ
  • 코린이
  • 중현초등학교
  • c언어
  • 코딩
  • 깃허브
  • 대학생 교육기부
  • 사피엔스4.0
  • 알고리즘
  • 대학생 대외활동
  • code club
  • 백준
  • 개발자
  • 안드로이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
newmin

개발 이것저것

[BOJ/C] 10828 스택
Algorithm/Problem Solving

[BOJ/C] 10828 스택

2021. 7. 21. 16:26

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

알고리즘 분류 : 스택

 

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


풀이

#include <stdio.h>
#define SIZE 10000
int arr[SIZE];
int top = 0;

int push(int x)
{
    if (top >= SIZE) return 0;
    arr[top++] = x;
    return 1;
}

int pop()
{
    if (top <= 0) return -1;
    else return arr[--top];
}

int size() {
    return top;
}

int empty() {
    if (top == 0) return 1;
    else return 0;
}

int get_top() {
    if (top >= SIZE || top <= 0)
        return -1;

    return arr[top - 1];
}

int main(void) {
    int n;
    char command[10];

    scanf_s("%d", &n); //주어지는 명령의 수

    while (n > 0) {
        n--;

        scanf_s("%s", command, 10);

        if (strcmp(command, "push") == 0) {
            int num;
            scanf_s("%d", &num);
            int rlt = push(num);

            if (rlt == -1)
                printf("error\n");
        }
        else if (strcmp(command, "pop") == 0) {
            printf("%d\n", pop());
        }
        else if (strcmp(command, "size") == 0) {
            printf("%d\n", size());
        }
        else if (strcmp(command, "empty") == 0) {
            printf("%d\n", empty());
        }
        else if (strcmp(command, "top") == 0) {
            printf("%d\n", get_top());
        }
    }
}

'Algorithm > Problem Solving' 카테고리의 다른 글

[Programmers/Java] 완전탐색 level1 : 모의고사  (0) 2022.02.11
[BOJ/JAVA] 1924번 : 2007년  (0) 2022.01.18
[BOJ/C] 3045 이중 연결 리스트  (0) 2021.08.03
[BOJ/C] 4949 균형잡힌 세상  (0) 2021.07.21
[BOJ/C] 2504 괄호의 값  (0) 2021.07.21
    'Algorithm/Problem Solving' 카테고리의 다른 글
    • [BOJ/JAVA] 1924번 : 2007년
    • [BOJ/C] 3045 이중 연결 리스트
    • [BOJ/C] 4949 균형잡힌 세상
    • [BOJ/C] 2504 괄호의 값
    newmin
    newmin
    매일 작심삼일로 작심일년

    티스토리툴바