잡다로그

[Python/코테] 백준 10828 스택 본문

Algorithm

[Python/코테] 백준 10828 스택

날으는다람쥐 2023. 11. 8. 21:16

10828 스택

문제 및 조건 설명: https://www.acmicpc.net/problem/10828

import sys

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

for i in range(n):
    command = sys.stdin.readline().split()

    if (command[0] == "push"):
        stack.append(int(command[1]))
        # pos += 1

    elif (command[0] == "pop"):
        if (len(stack) != 0):
            print(stack.pop())
        else:
            print(-1)

    elif (command[0] == "top"):
        if (len(stack) != 0):
            print(stack[-1])
        else:
            print(-1)

    elif (command[0] == "size"):
        print(len(stack))

    elif (command[0] == "empty"):
        if (len(stack) != 0):
            print(0)
        else:
            print(1)

나다어

  • 코테는 개발과 다르다. 변수를 담아 쓸 생각보다는 바로바로 이용할 생각을 하자. 한 케이스에서만 쓰이면 굳이 변수 설정할 필요도 없음(command[1]과 같이)
  • 입력의 갯수가 다를 때에는 split() 함수를 이용한다.

 


또는 직접 배열을 append, pop하지 않고 인덱스 변수를 사용해서 구현할 수 있다.

그러나 인덱스 변수를 사용하려면, out of range오류가 발생하지 않기 위해서 stack을 미리 초기화해두어야 하는데, 이는 메모리 비효율을 불러일으킬 수 있다.

import sys

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

stack = [0] * n
pos = 0

for i in range(n):
    command = sys.stdin.readline().split()
    func = command[0]

    if (func == "push"):
        stack[pos] = int(command[1])
        pos += 1

    elif (func == "pop"):
        if (pos != 0):
            print(stack[pos-1])
            pos -= 1
        else:
            print(-1)

    elif (func == "top"):
        if (pos != 0):
            print(stack[pos-1])
        else:
            print(-1)

    elif (func == "size"):
        print(pos)

    elif (func == "empty"):
        if (pos != 0):
            print(0)
        else:
            print(1)

 

Comments