[BOJ/백준] 10828번 스택 | 파이썬 (🌠sys.stdin.readline으로 시간 초과 해결)

2021. 8. 24. 11:32Problem Solving/Baekjoon Online Judge

문제

풀이

import sys

n = int(sys.stdin.readline())
stack = []
for i in range(n):
    cmd = sys.stdin.readline().strip()
    if 'push' in cmd:
        stack.append(cmd[5:])
    elif cmd == 'pop':
        if len(stack) == 0:
            print(-1)
        else:
            print(stack.pop())
    elif cmd == 'size':
        print(len(stack))
    elif cmd == 'empty':
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif cmd == 'top':
        if len(stack) == 0:
            print(-1)
        else:
            print(stack[-1])

 

구현 자체는 어렵지 않았지만 input()을 사용했다가 시간 초과가 나서 당황했던 문제.

 

input() 대신 sys.std.readline()을 사용해서 해결했다.

 

🌠input() vs sys.stdin.readline()

input([prompt])은 파이썬 내장함수다. prompt argument가 있을 때 argument는 줄 바꿈 문자 없이 출력된다. 그 후 input() 함수는 입력으로부터 한 줄을 읽고, 문자열로 변환한 후 반환한다. 줄 끝의 줄 바꿈 문자는 제거한다.

 

sys.stdin.readline()은 file object로 분류된다. 입력을 읽기 위해 다른 파일 객체를 만드는 것과 같다. input()과 달리 prompt argument를 받아 출력하지 않고, 줄 바꿈 문자를 제거하는 과정이 없다. 따라서 속도가 더 빠르다.

 

sys.stdin.readline()은 sys 모듈을 import 해서 사용한다.

* sys 모듈을 사용하면 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어 가능

 


풀이에서는 입력값의 개수 n을 맨 처음 입력받기 위해 int(sys.stdin.readline())을 사용했다. 형 변환을 해주지 않으면 줄 바꿈 문자를 포함한 값이 저장되기 때문에 주의해야 한다.

 

여러 줄의 명령을 입력받아야 하는 반복문 for에서는 sys.stdin.readline().rstrip()를 사용해 오른쪽 공백을 제거한 후 값을 입력받았다.


백준 18828번 : 스택

 

10828번: 스택

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

www.acmicpc.net

파이썬 공식문서

 

Built-in Functions — Python 3.9.6 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

input() vs sys.stdin.readline()

 

[Python] Input vs. sys.stdin.readline 차이점?

Python으로 백준 문제를 풀 때 내장 함수 input()으로 입력을 받으면 시간 초과로 오답처리가 되고, sys 모듈의sys.stdin.readline()으로 입력을 받으면 시간 안에 채점이 되는 경우가 자주 발생한다. 왜 그

buyandpray.tistory.com

sys.stdin.readline() 사용법

 

[Python 문법] 파이썬 입력 받기(sys.stdin.readline)

파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.

velog.io