[PYTHON] 10828 스택

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

     

    10828번: 스택

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

    www.acmicpc.net

    문제 풀이

    • 빈 배열을 만들어 입력 받으며 하는 실행들을 누적 실행한다.

    solution - 실패

    def push(stack,num):
      stack.append(num)
      return stack
    
    def pop(stack) :
      if stack:
        stack.pop(0)
        print(stack)
      else:
        print(-1)
    
    def size(stack):
      print(len(stack))
    
    def empty(stack):
      if stack:
        print(0)
      else:
        print(1)
    
    def top(stack):
      if stack:
        print(stack.pop(0))
      else:
        print(-1)
    
    import sys
    N = int(sys.stdin.readline().strip())
    for _ in range(N):
      stack = []
      data = sys.stdin.readline().strip().split()
      commond = data[0]
      # num = data[1]
      if len(data) == 1:
        commond(stack)
    • 미리 함수로 정의하고 입력받은 데이터로 호출하려고 했으나
    • TypeError: 'str' object is not callable 가 발생했습니다.

    solution - 성공

    import sys
    
    N = int(sys.stdin.readline().strip())
    stack = [] # 모든 명령어에 공통적으로 해당하기 때문에 아래 for문 안에 들어가지 않음. 즉 입력값을 받을때마다 초기화 하지 않음
    
    for _ in range(N):
      data = sys.stdin.readline().strip().split()
      if data[0] == 'push':
        stack.append(data[1])
      elif data[0] == 'pop':
        if stack:
          print(stack.pop()) # 제거될 가장 최신의 데이터를 출력
        else:
          print(-1)
      elif data[0] == 'size':
        print(len(stack))
      elif data[0] == 'empty':
        if stack:
          print(0)
        else:
          print(1)
      elif data[0] == 'top':
        if stack:
          print(stack[-1]) # 가장 최신인 데이터 출력
        else:
          print(-1)

    'algorithm > 백준' 카테고리의 다른 글

    [PYTHON] 1316 그룹단어 체커  (0) 2023.01.30
    [PYTHON] 11047 동전 0  (0) 2023.01.30
    [PYTHON] 2566 최댓값  (0) 2023.01.30
    [PYTHON] 8958 OX 퀴즈 - 등차 수열 / for  (0) 2023.01.26
    [PYTHON] 1546 평균  (0) 2023.01.26

    댓글