하루살이 개발자

[BaekJoon 10828번] 스택 문제(Python) 본문

코딩테스트

[BaekJoon 10828번] 스택 문제(Python)

하루살이 2022. 1. 4. 21:25

코딩테스트 연습 1일차

 

스택 문제입니다.

 

문제링크: www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

 

Solution

import sys

n = int(sys.stdin.readline())

stack = []

for _ in range(n) :
    input = sys.stdin.readline().split() #input()으로 입력받으면 시간초과 발생
    order = input[0] #명령어 받기
    
    #order의 값에 따라 역할을 수행하기
 
    if order =="push" :
        value = input[1]
        stack.append(value)
 
    elif order=="pop" :
        if len(stack)==0 :
            print(-1)
        else :
            print(stack.pop())
 
    elif order=="size" :
        print(len(stack))
 
    elif order=="empty" :
        if len(stack)==0 :
            print(1)
        else : 
            print(0)
 
    elif order=="top" : 
        if len(stack)==0 : 
            print(-1)
        else : 
            print(stack[-1])

 

정리

 

1. input()대신 sys.stdin.readline()을 사용하는 이유

 

한 두줄 입력받는 문제들과 다르게, 반복문으로 여러줄을 입력 받아야 할 때는 input()으로 입력 받는다면 시간초과가 발생할 수 있습니다.

 

[sys.stdin.readline() 사용법]

 

1) 한 개의 정수를 입력받을 때

import sys
x = int(sys.stdin.readline())

 

2) 정해진 개수의 정수를 한줄에 입력받을 때

import sys
a,b,c = map(int,sys.stdin.readline().split())

 

3) 임의의 개수의 정수를 한줄에 입력받아 리스트에 저장할 때

import sys
data = list(map(int,sys.stdin.readline().split()))

 

4) 임의의 개수의 정수를 n줄 입력받아 2차원 리스트에 저장할 때

import sys
data = []
n = int(sys.stdin.readline())
for i in range(n):
    data.append(list(map(int,sys.stdin.readline().split())))

 

5) 문자열 n줄을 입력받아 리스트에 저장할 때

import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

 

참고블로그: https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline