728x90
https://www.acmicpc.net/problem/18258
큐의 개념을 익히고 실습하는 문제. 연산 당 시간 복잡도가 O(1)이어야 한다는 점에 유의하세요.
나의 풀이
Queue를 구현하는 문제로 명령은 다음과 같음
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
큐는 선입 선출의 구조를 가지고 있고 예시로 대기줄을 들 수 있음
간단한 구현이기 때문에 시간복잡도를 전혀 고려하지 않고 list로만 문제를 해결하려고 했으나 시간 초과가 발생했음ㅠ
import sys
cnt = int(sys.stdin.readline())
answer = []
for _ in range(cnt):
command = sys.stdin.readline().split()
if command[0] == 'push':
answer.append(command[1])
elif command[0] == 'pop':
if answer:
print(answer.pop(0))
else:
print(-1)
elif command[0] == 'size':
print(len(answer))
elif command[0] == 'empty':
if answer:
print(0)
else:
print(1)
elif command[0] == 'front':
if answer:
print(answer[0])
else:
print(-1)
elif command[0] == 'back':
if answer:
print(answer[-1])
else:
print(-1)
저번에 프로그래머스에서도 같은 문제가 발생했었기 때문에 deque를 활용하여 코드를 수정하였음
많이, 자주 쓰는 것만 손에 익다 보니 더 빠른 걸 알아도 쓰지 않는다는 걸 알게 되었고 좀 고쳐야겠다. 빠르게 살자,,
import sys
from collections import deque
cnt = int(sys.stdin.readline())
answer = deque()
for _ in range(cnt):
command = sys.stdin.readline().split()
if command[0] == 'push':
answer.append(command[1])
elif command[0] == 'pop':
if answer:
print(answer.popleft())
else:
print(-1)
elif command[0] == 'size':
print(len(answer))
elif command[0] == 'empty':
if answer:
print(0)
else:
print(1)
elif command[0] == 'front':
if answer:
print(answer[0])
else:
print(-1)
elif command[0] == 'back':
if answer:
print(answer[-1])
else:
print(-1)
728x90
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python] 파이썬 백준(10870) 피보나치 수 5 (0) | 2023.04.09 |
---|---|
[Python] 파이썬 백준(27433) 팩토리얼2 (0) | 2023.04.09 |
[Python] 파이썬 백준(1874) 스택 수열 (0) | 2023.04.06 |
[Python] 파이썬 백준(4949) 균형잡힌 세상 (0) | 2023.04.06 |
[Python] 파이썬 백준(9012) 괄호 (0) | 2023.04.04 |