💻STUDY/BOJ

[BOJ] 10828. 스택 (Python,C)

coldNoodlePigeon 2022. 1. 27.
  • 코딩 초보. 

10828. 스택

 

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

명령은 총 다섯 가지이다.

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

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

 

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

 


1. Python

 

import sys 
t=int(sys.stdin.readline())
stack=[]

for _ in range(t):
    command=sys.stdin.readline().split()
    k=command[0]
    if k=="push":
        stack.append(command[1])
    elif k=="pop":
        if len(stack)==0:
            print(-1)
        else:
            print(stack.pop())
    elif k=="size":
        print(len(stack))
    elif k=="empty":
        if len(stack)==0:
            print(1)
        else:
            print(0)
    elif k=="top":
        if len(stack)==0:
            print(-1)
        else:
            print(stack[-1])

처음에 input()을 이용했는데 시간초과가 떠서 뭐지? 하고 찾아봤는데 input()의 경우 시간이 오래걸린다고 해서 sys.stdin.readline() 을 찾아서 이용했다. 그랬더니 시간초과가 걸리지 않고 성공했습니다 가 떴다. 

 

파이썬에서 기본적으로 제공해주는 라이브러리가 많아서 구현은 쉬웠다. 

 


2.C

#include <stdio.h>
#include <string.h>

int numstack[10001];
int count = 0; 

void push(int num) {
	numstack[count] = num;
	count++; 
}

void pop() {
	if (count != 0) {
		count--;
		printf("%d\n", numstack[count]);
		numstack[count] = 0; 
	}
	else {
		printf("%d\n", -1); 
	}
}

void top() {
	if (count != 0) {
		printf("%d\n", numstack[count - 1]);
	}
	else {
		printf("%d\n", -1); 
	}
}

void size() {
	printf("%d\n", count); 
}

void empty() {
	if (count != 0) {
		printf("0\n");
	}
	else {
		printf("1\n"); 
	}
}

main() {
	int t;
	char command[10];
	scanf("%d", &t);


	for (int i = 0; i < t; i++) {
		scanf("%s", &command); 
		if (strcmp(command, "push") == 0) {
			int num;
			scanf("%d", &num);
			push(num);
		}
		else if (strcmp(command, "pop") == 0) {
			pop();
		}
		else if (strcmp(command, "top") == 0) {
			top();
		}
		else if (strcmp(command, "size") == 0) {
			size();
		}
		else if (strcmp(command, "empty") == 0) {
			empty();
		}
	}

}

학교에서 c언어 수업때 배웠던 스택과 유사한 구조여서 여러가지 참고하며 공부했다. 

복습하는 느낌! 

'💻STUDY > BOJ' 카테고리의 다른 글

[BOJ] 11866. 요세푸스 문제 0  (0) 2022.01.30
[BOJ] 10845. 큐 (C,Python)  (0) 2022.01.28
[BOJ] 10989. 수 정렬하기 (C)  (0) 2022.01.26
[BOJ] 1924. 2007년 (Python,C)  (0) 2022.01.25
[BOJ] 2751. 수 정렬하기 2 (Python, C)  (0) 2022.01.25

댓글