코딩놀이: python C C++

[10828] 알고리즘 - 스택

jiheek 2022. 5. 19. 18:39

https://www.acmicpc.net/problem/10828

백준 10828번을 풀어보자!

 

10828번: 스택

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

www.acmicpc.net

 

1. 첫시도 (틀림. 시간초과)

co_num=0

co_num=input()
co_num=int(co_num)

stack = []

for i in range(co_num):

    b=input()
    
    if "push" in b:
        stack.append(int(b[5:]))
    elif "pop" in b:
        if stack:
            print(stack[-1])
            stack=stack[:-1]
        else:
            print("-1")
    elif "size" in b:
        print(len(stack))
    elif "empty" in b:
        if stack:
            print(0)
        else:
            print(1)
    elif "top" in b:
        if stack:
            print(stack[-1])
        else:
            print(-1)

 

 

결과는 잘 나왔는데 백준에서는 런타임 에러가 떴다.

 

2. 두 번째 시도 (성공)

import sys

co_num=int(sys.stdin.readline())
stack = []

for i in range(co_num):

    b = sys.stdin.readline().split() #input 대신 sys.stdin.readline()사용
    ch=b[0]
    
    if "push" in ch:
        stack.append(int(b[1]))
    elif ch=="pop":
        if stack:
            print(stack[-1])
            stack=stack[:-1]
        else:
            print(-1)
    elif ch=="size":
        print(len(stack))
    elif ch=="empty":
        if stack:
            print(0)
        else:
            print(1)
    elif ch=="top":
        if stack:
            print(stack[-1])
        else:
            print(-1)

input대신 sys.stdin.readline() 사용하니까 성공했다. 백준에서는 입력받을 때 input사용하면 시간초과 에러가 자주 뜬다고 한다.

 

readline과 input 차이점
readline은 마지막 개행문자 \n도 저장해서, input보다 길이가 한 글자 더 길다.