[Python] 백준 알고리즘 온라인 저지 10845 큐
https://www.acmicpc.net/problem/10845
큐의 구조 이해를 돕는 문제였던 것 같다. FIFO 선입선출에 대해 알고 있다면 쉽게 해결할 수 있었다.
코드
import sys
input = sys.stdin.readline
def push(x):
que.append(x)
def pop():
if len(que) == 0:
print(-1)
else:
first = que[0]
que.pop(0)
print(first)
def size():
print(len(que))
def empty():
if len(que) == 0:
print(1)
else:
print(0)
def front():
if len(que) == 0:
print(-1)
else:
print(que[0])
def back():
if len(que) == 0:
print(-1)
else:
print(que[-1])
n = int(input())
que = []
for _ in range(n):
A = input().strip()
if A.find("push") == 0:
A, B = map(str, A.split())
push(int(B))
else:
if A == 'pop':
pop()
if A == 'size':
size()
if A == 'empty':
empty()
if A == 'front':
front()
if A == 'back':
back()
풀이
코드는 상당히 길어보이지만 각 명령어를 함수로 처리할 수 있도록 하였다. 이번 문제에서 deque를 이용하는 방법도 있지만 이번에는 그대로 문제를 풀어 보았다 deque 활용법이 궁금하시다면 여기로...
선입선출이라는 말을 어렵지만 쉽게 생각하면 줄을 서는 행위와 같다
- push = que라는 리스트 뒤에 수를 추가
- pop = que 리스트에 아무것도 없다면 -1 있다면 맨 앞의 수를 빼야 하므로 que[0]을 활용하고 뺀 수를 출력한다.
- size = que의 길이 이므로 len 내장 함수를 이용한다.
- empty = 비었는지 안비었는지 확인하는 것으로 여기서도 len을 활용한다.
- front = 비어있지 않다면 맨앞의 수를 출력한다 que[0]
- back = 마지막으로 맨 마지막 수를 출력하는 것이므로 que[-1]을 활용한다.
이번에는 find라는 함수로 push를 찾고 true라면 A와 B로 변수를 받아 활용하였다.
풀이 결과
'알고리즘' 카테고리의 다른 글
백준 11053번 가장 긴 증가하는 부분 수열 파이썬 풀이 (0) | 2022.03.05 |
---|---|
백준 11399번 ATM 파이썬 풀이 (0) | 2022.03.03 |
백준 11052번 카드 구매하기 파이썬 풀이 (0) | 2022.02.26 |
백준 2164번 카드2 파이썬 풀이 (0) | 2022.02.24 |
SWEA 2005번 파스칼의 삼각형 파이썬 풀이 (0) | 2022.02.22 |