[백준] 10828번 : 스택

letsbebrave·2022년 1월 14일
0

codingtest

목록 보기
23/146

문제

개념

파이썬에서 Stack 자료구조 활용

파이썬은 따로 stack 구조를 제공하지 않기 때문에, 기본 클래스 list를 사용하여 stack을 표현할 수 있다.

  • push로는 .append()
  • pop으로는 .pop()
  • top으로는 stack[-1] : 마지막 원소를 제거하지 않고 가져오기만 할 때

sys.stdin.readline() < 중요!

입출력을 빠르게 받으려면 input()을 이용하면 속도가 오래 걸린다.

파이썬의 표준 라이브러리인 sys (import sys를 위에 써줘야 함)를 임포트 하여 sys.stdin.readline()을 사용하면 더 빠르게 처리할 수 있다.

또한 메모리도 덜 쓸 수 있다.

그러니까 앞으로는 특히 반복해서 입력을 받을 땐 (반복문에 입력 받을 시) sys.stdin.readline()을 넣어주는 게 좋다.

  1. 문자열을 입력받을 때
import sys
sentence = sys.stdin.readline()
  1. 한 개의 정수 입력받을 때
import sys
sentence = int(sys.stdin.readline())

sys.stdin.readline()으로 받은 문자열은 개행문자\n를 포함하는데, 문자열을 int()로 형변환해주면 개행문자는 사라지고 정수형태만 남는다.

  1. 여러 개의 정수를 입력받을 때
import sys
a, b = int(sys.stdin.readline().split())

# input 쓸 시
# a, b = map(int,input().split()
  1. 문자열 N줄을 입력받아 리스트에 저장할 때
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

문자열 N개라고 지정되어 있는 경우엔 for문을 이용해서 문자열 N개를 리스트에 넣어줄 수 있다.

strip()은 문자열의 앞과 끝의 공백문자를 제거해주는 함수!

cf.
lstrip(): 인자로 받은 string의 왼쪽 공백문자 제거
rstrip(): 인자로 받은 string의 오른쪽 공백문자 제거

Ref.

https://growingarchive.tistory.com/157

시간초과 풀이

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

for i in range(N):
    order = input()
    a = order.split()[0]
    
    if a == "push":
        stack.append(int(order.split()[1]))
    elif a == "pop":
        if len(stack) > 0 :
            print(stack.pop())
        else :
            print(-1)
    elif a == "size":
        print(len(stack))
    elif a == "empty":
        if len(stack) == 0 :
            print(1)
        else :
            print(0)
    elif a == "top":
        if len(stack) == 0 :
            print(-1)
        else : 
            print(stack[-1])
    

정답 풀이

import sys

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

for i in range(N):
    order = sys.stdin.readline()
    a = order.split()[0]
    
    if a == "push":
        stack.append(int(order.split()[1]))
    elif a == "pop":
        if len(stack) > 0 :
            print(stack.pop())
        else :
            print(-1)
    elif a == "size":
        print(len(stack))
    elif a == "empty":
        if len(stack) == 0 :
            print(1)
        else :
            print(0)
    elif a == "top":
        if len(stack) == 0 :
            print(-1)
        else : 
            print(stack[-1])
    
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글