

문제를 읽어보면 명령어를 입력받아 각 명령어마다 적절한 동작을 하도록 구현하면 된다
스택은 LIFO(Last In First Out) 구조로 데이터를 쌓아올린 구조이다
스택에 1, 2, 3, 4, 5를 순서대로 넣으면
5
4
3
2
1
과 같은 형식으로 저장이 된다
이를 파이썬에서 리스트로 나타내면 배열의 끝자리에서만 데이터가 이동한다고 생각하면 된다
리스트에 [1, 2, 3, 4, 5]가 들어있다면 (배열의 길이 - 1)인덱스에서 데이터의 삽입과 삭제가 이루어진다
1번 명령어의 경우 두 가지를 입력받아야하므로 .split()을 사용하여 모든 명령어를 입력받도록 구현하였다
그리고 각 명령어마다 적절한 역할을 하도록 작성을 하여 제출을 하였는데 시간초과가 발생한다...
import sys
stack = []
n = int(input())
for _ in range(n):
cmd = sys.stdin.readline().split()
if cmd[0] == '1':
stack.append(cmd[1])
elif cmd[0] == '2':
if stack:
print(stack[-1])
stack.remove(stack[-1])
else:
print(-1)
elif cmd[0] == '3':
print(len(stack))
elif cmd[0] == '4':
if stack:
print(0)
else:
print(1)
else:
if stack:
print(stack[-1])
else:
print(-1)
일부러 시간초과가 발생할까봐 input() 대신 sys.stdin.readline()을 사용하였는데 다른 곳을 수정해야할 것 같았다
2번 명령어 부분을 작성할 때 remove를 사용하였는데,
찾아보니 pop 연산자를 사용하면 삭제와 호출을 동시에 해주므로 더 빠른 동작이 이루어질 수 있었다
이를 적용하여 다시 제출을 하니 맞았습니다!! 라는 문구를 확인할 수 있었다
import sys
stack = []
n = int(input())
for _ in range(n):
cmd = sys.stdin.readline().split()
if cmd[0] == '1':
stack.append(cmd[1])
elif cmd[0] == '2':
if stack:
print(stack.pop(-1))
else:
print(-1)
elif cmd[0] == '3':
print(len(stack))
elif cmd[0] == '4':
if stack:
print(0)
else:
print(1)
else:
if stack:
print(stack[-1])
else:
print(-1)

'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 9012 괄호(실버 4) - Python (0) | 2024.11.25 |
|---|---|
| [Baekjoon]백준 10773 제로(실버 4) - Python (0) | 2024.11.24 |
| [Baekjoon]백준 13909 창문 닫기(실버 5) - Python (0) | 2024.11.22 |
| [Baekjoon]백준 17103 골드바흐 파티션(실버 2) - Python (0) | 2024.11.21 |
| [Baekjoon]백준 4948 베트르랑 공준(실버 2) - Python (1) | 2024.11.20 |