본문 바로가기
코딩테스트/백준 알고리즘

백준 알고리즘 | 10828 : 스택 (Python / 파이썬)

by 함께 공부해요 2020. 10. 12.


스택 성공분류

시간 제한

메모리 제한

제출

정답

맞은 사람

정답 비율

0.5 초 (추가 시간 없음)

256 MB

78997

30367

22043

39.390%

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보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

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

알고리즘 분류

자료 구조

스택


백준 알고리즘 # 10828번 : 스택

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

for _ in range(n):
    i = sys.stdin.readline().split()

    if i[0] == 'push':
        stack.append(int(i[1]))
    
    elif i[0] == 'pop':
        if not stack:
            print(-1)
        else:
            print(stack[-1])
            stack.pop()
    
    elif i[0] =='size':
        print(len(stack))

    elif i[0] == 'empty':
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    
    elif i[0] == 'top':
        if not stack:
            print(-1)
        else:
            print(stack[-1])
 

자료구조 ★★

p.162, 2-21) 자료 구조의 분류▶ 선형 구조(Linear Structure)- 배열(Array)- 스택(Stack)- 큐(Queue...

blog.naver.com

풀이

스택(stack)에 대한 이해를 하고 풀면 쉬운 문제에요👏

다만 문제를 제출 했을 때 시간 초과가 떳는데, 이것은 input()을 sys.stdin.readline()으로 바꿔서 해결했어요.

간단히 풀이를 하자면 변수 n으로 정수를 입력받고, stack 변수를 리스트로 저장해요.

그리고 for문으로 입력받은 n만큼 반복을 해주면서 변수 i로 split()으로 나눠서 리스트로 입력받아요.

예제 입력 1로 예를 들면 ['push', '1']로 입력받아지는 거에요👌

그리고 for문이 돌아가는 동안 주어진 조건 5개에 대해서 if 조건문을 사용해서 나눠주면 되는데

key point

push X: 정수 X를 스택에 넣는 연산이다.

pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

size: 스택에 들어있는 정수의 개수를 출력한다.

empty: 스택이 비어있으면 1, 아니면 0을 출력한다.

top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

위의 조건을 기억하고 push부터 코드를 짜면

push의 개념은 stack에 넣는 것이니 append()로 넣어주고

pop은 stack에서 꺼내는 것이니 맨 위에있는 것, 즉 stack[-1]를 프린트하고 pop()으로 꺼내줘요.

다음으로 size는 len()를 사용해서 stack의 크기를 재고

empty는 조건에 맞게끔만 1과 0을 각각 출력하게끔 하면 되요.

마지막으로 top은 가장 위에 있는 것을 출력하는 것이니 pop과 마찬가지로 stack[-1]을 출력해주지만

pop과 다르게 맨 위에 있는 수를 출력만하고 그대로 냅둬요.

이렇게 실행하면 각각 출력되면서 오랜만의 문제 풀이 끄-읏!👏

세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏

 

wook2124/Algorithm-Test

Practice algorithm. Contribute to wook2124/Algorithm-Test development by creating an account on GitHub.

github.com

최종 소스코드

댓글