카테고리 없음

[코드트리] 스택

chaewot 2026. 3. 29. 22:50
class stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)
    
    def pop(self):
        if self.empty() == True:
            raise Exception("Stack is Empty")
        return self.items.pop()

    def size(self):
        return len(self.items)
    
    def empty(self):
        return not self.items

    def top(self):
        if self.empty() == True:
            raise Exception("Stack is empty")

        return self.items[-1]

n=int(input())
s = stack()

for i in range(n):
    command = input().split()
    if command[0] == "push":
        s.push(command[1])
    elif command[0] == "size":
        print(s.size())
    elif command[0] == "empty":
        print(1 if s.empty() else 0)
    elif command[0] == "pop":
        print(s.pop())
    elif command[0] == 'top':
        print(s.top())

 

class stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)
    
    def pop(self):
        if self.empty() == True:
            raise Exception("Stack is Empty")
        return self.items.pop()

    def size(self):
        return len(self.items)
    
    def empty(self):
        return not self.items

    def top(self):
        if self.empty() == True:
            raise Exception("Stack is empty")

        return self.items[-1]
  1. __init__을 통해서 무조건 스택을 만들어줘야 함, 위 코드는 스택 이름이 items라는 것임
  2. self는 자기 객체를 만들게 해줌, 따로 독립되게 객체 생성
self.items = []

s1.items → []
s2.items → []

   3. list에는 empty() 메소드가 없음. 그래서 '객체 자체'에서 '내가 직접 만든 empty() 메소드'를 사용해줘야함

   4. 파이썬에서 '리스트가 비어있음' 아래 의미를 나타냄 

[] False (비어있음)
[1,2] True (값 있음)
  def empty(self):
        return not self.items

그래서 이건 self.items가 비어있으면 false, 안 비어있으면 true를 나타내는 것이다

우리 문제에서는 비어있어야 true가 되니까 flase의 반대로 쓰기 위해 not을 붙인 것이다.

   5. 역순은 그냥 -1로 놔주면 된다

return self.items[-1]

   6. pop(), append(), insert()는 파이썬에서 제공해주는 메소드

 

괄호 문제

class stack:
    def __init__(self):
        self.items = []

    def push(self):
        self.items.append('(')
    
    def pop(self):
        if (len(self.items)) == 0:
            return False
        self.items.pop()
        return True


str = input()
s = stack()

for i in range(len(str)):
    if str[i] == '(':
        s.push()
    elif str[i] == ')':
        if not s.pop():
            print('No')
            exit()


print('Yes' if not s.items else 'No')
    

# Please write your code here.

exit()는 그냥 No 출력되면 바로 종료. 밑에 print 할 것도 없음