본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #18258: 큐2

https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

[오답] → 시간초과

 

다른 문제에서 collections 패키지의 deque 모듈을 사용했을 때 시간이 단축된다는 것을 발견하고 이 문제를 다시 풀어보았다.

 

 


[정답]

 

먼저 queue에 대한 함수들을 정의한다.

1. 'push X: 정수 X를 큐에 넣는 연산이다.' → push(X): append() 함수를 사용하여 큐 q_queue에 인자값 X를 push한다.

2. 'pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → pop(): len(q_queue)==0이라면 -1을, len(q_queue)==0이 아니라면 popleft() 함수를 사용하여 q_queue에 가장 앞에 있는 정수를 pop한다.

3. 'size: 큐에 들어있는 정수의 개수를 출력한다.' → size(): len() 함수를 사용하여 q_queue의 길이를 출력한다.

4. 'empty: 큐가 비어있으면 1, 아니면 0을 출력한다.' → empty(): len(q_queue)==0이라면 -1을, len(q_queue)==0이 아니라면 0을 출력한다.

5. 'front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → front(): len(q_queue)==0이라면 -1을, len(q_queue)==0이 아니라면 큐의 가장 앞에 있는 정수 즉 q_queue[0]을 출력한다.

5. 'back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.' → back(): len(q_queue)==0이라면 -1을, len(q_queue)==0이 아니라면 큐의 가장 뒤에 있는 정수 즉 q_queue[-1]을 출력한다.

 

 

 

6. 명령어 수를 N에 입력받는다. 큐의 역할을 할 큐 q_queue를 정의한다.

7. for문을 돌면서 명령어를 comm에 입력받는다. comm을 split()으로 받아 comm=push 1일 경우, comm[0]=push, comm[1]=1로 되도록 한다. comm[0]이 각각 'push', 'pop', 'size', 'empty', 'front', 'back' 경우를 나누어 위에서 정의한 알맞은 함수에 적용한다.