반응형
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
<<소스코드>>
import sys
from collections import deque #deque모듈 삽입
def push(x):
queue.append(x)
def pop(): #pop하기전에 queue가 비었는지 확인
if not queue:
return -1
else:
return(queue.popleft()) #뺀값을 그대로 출력. 위에 queue.popleft 썼다가 두번 빠짐
def size():
return len(queue)
def empty(): #queue가 비지않았다면 1 출력, 비었다면 0 출력
return 1 if not queue else 0
def front(): #queue에 무언가 있다면(=비지않았다면) 제일 앞의 값 출력
return queue[0] if queue else -1
def back(): #queue에 무언가 있다면(=비지않았다면) 제일 뒤의 값 출력
return queue[-1] if queue else -1
queue = deque() #deque 생성
n = int(sys.stdin.readline())
for _ in range(n):
orders = sys.stdin.readline().rstrip()
if orders.split()[0] == "push":
push(orders.split()[1])
elif orders == "pop":
print(pop())
elif orders == "size":
print(size())
elif orders == "empty":
print(empty())
elif orders == "front":
print(front())
elif orders == "back":
print(back())
<<결과값>>
15
push 1
push 2
front
1
back
2
size
2
empty
0
pop
1
pop
2
pop
-1
size
0
empty
1
pop
-1
push 3
empty
0
front
3
10828 스택 문제와 풀이 방식이 똑같았다. 다만 스택에서 deque를 이용한 것이 달랐다!
deque를 알면 어렵지 않게 풀 수 있다.
이 문제에서 살짝 실수했던 것은 pop을 할 때, deque에 값이 없다면 였고, pop의 popleft를 써야 맨 앞에 값을 빼준다는것.
처음에 그냥 pop해서 다른값이 빠져서 당황했음
그리고 이번엔 3항연산자를 써보려고 노력했다.
어제 밤에 파이썬 기본 인강에서 3항연산자 부분이 나왔다. 간단한 조건들이라 한줄로 쓰는게 훨씬 깔끔해보인다!
처음엔 더 헷갈리는데? 했는데 계속 보니깐 더 직관적인것 같기두 하구? 앞으로도 계속 줄여서 쓰는 연습해야지
프로 숏코딩러가 될꺼야 ✦‿✦
def empty():
return 1 if not queue else 0
def front():
return queue[0] if queue else -1
def back():
return queue[-1] if queue else -1
728x90
반응형
'알고리즘' 카테고리의 다른 글
[파이썬] 단계별 백준 문제 풀기 - 2108번 정렬 (통계학) (0) | 2021.03.17 |
---|---|
[파이썬] 단계별 백준 문제 풀기 - 1260번 DFS/BFS (DFS와 BFS) (0) | 2021.03.16 |
[파이썬] 단계별 백준 문제 풀기 - 9012번 스택 (괄호) (0) | 2021.03.16 |
[파이썬] 단계별 백준 문제 풀기 - 10773번 스택 (제로) (0) | 2021.03.16 |
[파이썬] 단계별 백준 문제 풀기 - 10828번 스택 (0) | 2021.03.16 |