Post
스택(백준 10828번) | Gihun Son

스택(백준 10828번)

문제

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

명령은 총 다섯 가지이다.

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

Untitled

Untitled 1

나의 풀이

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
import sys
N=int(input())

my_stack=[]
for i in range(N):
    com=sys.stdin.readline().strip()
    if com.startswith('push'):
        my_stack.append(int(com.split()[-1]))
    elif com=='top':
        if len(my_stack):
            print(my_stack[-1])
        else:
            print(-1)
    elif com=='size':
        print(len(my_stack))
    elif com=='pop':
        if len(my_stack):
            print(my_stack.pop())
        else:
            print(-1)
    elif com=='empty':
        if len(my_stack):
            print(0)
        else:
            print(1)
  • for문을 사용할 때, 입력을 input()으로 받으면 ‘시간초과’

    1. input() 은 매개변수로 prompt message를 받고, 출력함.

    2. 입력받은 값의 ‘\n(개행 문자)’을 삭제시키고 반환함.

  • sys.stdin.readline()을 사용하여 해결 가능
    • 문자열을 입력으로 받음.
    • ‘\n(개행 문자)’을 같이 입력으로 받음.
  • sys.stdin.readline()을 통해 입력 받은 값에 strip()을 사용하면 ‘\n’없이 입력 받을 수 있음
    • N=sys.stdin.readline().strip()
    • strip()은 문자열 양 옆의 ‘\n’, ‘\t’를 업애준다.

추가적인 문법

  • 리스트 함수
    • index(x) 함수는 리스트에 x 값이 있으면 x의 인덱스 값(위칫값)을 리턴
    • insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수
    • remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수
    • pop()은 리스트의 맨 마지막 요소를 리턴하고 그 요소는 삭제
    • pop(x)는 리스트의 x번째 요소를 리턴하고 그 요소는 삭제
    • count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 리턴하는 함수
    • extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더함
This post is licensed under CC BY 4.0 by the author.