티스토리 뷰

728x90
반응형

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

 

10828번: 스택

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

www.acmicpc.net

 

시도 1 - 정답

import sys
n = int(sys.stdin.readline())
arr = []
for i in range(n):
    comm = sys.stdin.readline().strip()
    
    if "push" in comm:
        
        c,num = comm.split()
        num = int(num)
        arr.append(num)
        
    elif comm=="top":
        if len(arr)==0:
            print(-1)
        else:
            print(arr[len(arr)-1])
    
    elif comm=="pop":
        if len(arr)!=0:
            print(arr.pop())
        else:
            print(-1)    
        
    elif comm=="empty":
        if len(arr)==0:
            print(1)
        else:
            print(0)
    elif comm =="size":
       print(len(arr))

 

처음에 input()으로 했더니 시간초과 떠서 sys.stdin.readline()으로 바꿨더니 틀렸습니다 뜸 ...

보니까 sys.stdin.readline()은 개행도 해줘서 strip()으로 개행 없애고 다시 넣었더니 통과!!

 

근데 파이썬은 -1번째 인덱스가 마지막 값이므로 이렇게 해서 풀면 len() 메소드를 쓰는 것보다 시간이 더 짧게 나오지 않을까 싶어서 수정해봤다.


시도 2 - 정답

import sys
n = int(sys.stdin.readline())
arr = []
for i in range(n):
    comm = sys.stdin.readline().strip()
    
    if "push" in comm:
        
        c,num = comm.split()
        
        arr.append(int(num))
        
    elif comm=="top":
        if arr:
            print(arr[-1])
            
        else:
            print(-1)
    
    elif comm=="pop":
        if arr:
            print(arr.pop())
        else:
            print(-1)    
        
    elif comm=="empty":
        if arr:
            print(0)
        else:
            print(1)
    elif comm =="size":
       print(len(arr))

 

 if len(arr) !=0:  => if arr: 

print(arr[len(arr)-1]) => print(arr[-1])

 

시간은 똑같았지만 그래도 더 간결하게 쓸 수 있으니 수정 버전으로 쓰도록 해야겠다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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 26 27 28
글 보관함