import sys
def stack_method(command, X=None): #X=None -> 매개변수의 기본 값 설정
# 스택 초기화 - 전역변수로 선언하여 모든 명령에서 접근할 수 있도록 함
global stack
if command == 1:
stack.append(X)
elif command == 2:
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
elif command == 3:
print(len(stack))
elif command == 4:
if len(stack) == 0:
print(1)
else:
print(0)
elif command == 5:
if len(stack) != 0:
print(stack[-1])
else:
print(-1)
# 스택 초기화
stack = []
# 첫째 줄에 명령의 수 N을 입력받습니다.
N = int(sys.stdin.readline().strip())
# N개의 명령을 처리합니다.
for _ in range(N):
command = list(map(int, sys.stdin.readline().strip().split()))
if command[0] == 1: # 삽입 명령인 경우
stack_method(command[0], command[1])
else: # 나머지 명령은 하나의 인자만 필요
stack_method(command[0])
어제 문제를 풀면서 파이썬에서는 스택의 구현을 리스트로 처리한다는 것을 알고 스택 구현하는 문제를 풀게되었다.
스택의 push = 리스트의 append 메서드
스택의 pop = 리스트의 pop 메서드
--> pop 메서드는 리스트의 마지막 요소를 삭제하고, 그 삭제된 요소를 반환하는 메서드이다. 기본적으로 리스트의 마지막 요소를 제거하지만, 인덱스를 지정하면 해당 인덱스의 요소를 삭제할 수도 있다.
설명: 스택의 맨 위에 요소 x를 추가합니다.
예시:
stack = []
stack.append(1)
stack.append(2)
print(stack) # 출력: [1, 2]
설명: 스택의 맨 위 요소를 제거하고 그 값을 반환합니다. 인덱스를 지정하지 않으면 마지막 요소를 제거합니다.
예시:
stack = [1, 2, 3]
top_element = stack.pop() # 3을 제거하고 반환
print(top_element) # 출력: 3
print(stack) # 출력: [1, 2]
설명: 스택의 맨 위 요소를 반환합니다. 삭제하지 않습니다.
예시:
stack = [1, 2, 3]
top_element = stack[-1] # 3을 반환
print(top_element) # 출력: 3
설명: 스택의 현재 요소 개수를 반환합니다.
예시:
stack = [1, 2, 3]
print(len(stack)) # 출력: 3
설명: 스택의 모든 요소를 제거합니다.
예시:
stack = [1, 2, 3]
stack.clear()
print(stack) # 출력: []
설명: 다른 iterable(리스트, 튜플 등)의 요소를 스택에 추가합니다.
예시:
stack = [1]
stack.extend([2, 3])
print(stack) # 출력: [1, 2, 3]
설명: 인덱스 i 위치에 요소 x를 추가합니다. 스택의 동작과는 다소 다르지만, 원하는 위치에 삽입할 수 있습니다.
예시:
stack = [1, 2]
stack.insert(0, 0) # 인덱스 0에 0을 추가
print(stack) # 출력: [0, 1, 2]