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]
- __init__을 통해서 무조건 스택을 만들어줘야 함, 위 코드는 스택 이름이 items라는 것임
- 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 할 것도 없음