[백준] 10828번 : 스택 (파이썬)

뚝딱이 공학도·2022년 2월 2일
0

문제풀이_백준

목록 보기
45/159




문제





나의 첫번째 답안

n=int(input())
stack=[]

def push(p):
    stack.append(p)

def pop():
    if len(stack)!=0:
        print(stack.pop())
    else:
        print(-1)

def size():
    print(len(stack))

def empty():
    if len(stack)==0:
        print(1)
    else:
        print(0)

def top():
    if len(stack)!=0:
        print(stack[-1])
    else:
        print(-1)
    
for i in range(n):
    command=input().split()
    if command[0]=='push':
        push(command[1])
    elif command[0]=='pop':
        pop()
    elif command[0]=='size':
        size()
    elif command[0]=='empty':
        empty()
    elif command[0]=='top':
        top()

채점결과 시간초과가 떴다.
시간초과를 피하려고 pop과 top에서 empty를 호출하는 것도 피했는데
입출력 속도를 고려하지 못했다.

나의 최종 답안

import sys
input=sys.stdin.readline

n=int(input())
stack=[]

def push(p):
    stack.append(p)

def pop():
    if len(stack)!=0:
        print(stack.pop())
    else:
        print(-1)

def size():
    print(len(stack))

def empty():
    if len(stack)==0:
        print(1)
    else:
        print(0)

def top():
    if len(stack)!=0:
        print(stack[-1])
    else:
        print(-1)
    
for i in range(n):
    command=input().split()
    if command[0]=='push':
        push(command[1])
    elif command[0]=='pop':
        pop()
    elif command[0]=='size':
        size()
    elif command[0]=='empty':
        empty()
    elif command[0]=='top':
        top()

코드는 단순하다. 각 기능 별로 함수를 정의해 사용해주면된다.
1. push함수는 함수의 인자로 추가할 값을 받는다. 해당 값을 스택에 append해준다.
2. pop함수는 스택이 비어있지 않으면 가장 위의 값을 스택에서 제거한다.
3. size함수는 스택의 길이를 구해(len) 스택 안의 정수의 개수를 구한다.
4. empty함수는 스택이 비어있으면 1을 출력, 아니라면 0을 출력해준다.
5. top함수는 스택이 비어있지 않으면, 스택에 가장 마지막에 저장된 값을 출력해준다.

이렇게 함수를 정의해주고 난 후에는 반복문을 통해 n개의 명령을 입력 받으면 된다.
6. 명령+숫자 형식이므로 공백으로 분리된 입력을 받는다.
7. 명령이 push이면 push함수를 호출하고, 입력 받은 숫자(command[1])를 인자로 넘겨준다.
8. 다른 명령도 동일하게 함수를 호출해주면 된다.




입출력 속도

반복문을 통해 입력 받을 때에는 입출력 속도 향상을 위해

import sys
input=sys.stdin.readline

를 사용해주어야 한다고 한다. 한줄만 입력 받는 것이 아닌, 여러줄을 입력받는 것이기 때문이다.
위 코드에서 input함수를 sys.stdin.readline로 재정의 해주었으나,
n=int(sys.stdin.readline()) 와 같이 사용해도 된다고 한다.
참고로 입출력 속도는 sys.stdin.readline가 가장 빠르고 input이 가장 느리다고 한다.
: sys.stdin.readline > raw_input() > input()

0개의 댓글