반응형

   문제

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




앞에 문제를 끝내고 다시 자료구조로 돌아왔다.

큐를 구현하는 문제이다.

스택을 구현한곳에서 조금만 바꾸면 될 것 같았으나 시간초과가 떴다.

이유는 pop을 하는 과정에서 단순히 제거를 했을경우 pop을 할때마다 한칸씩 모두 옮겨야

 하는 작업을 할것이다.파이썬으로는 결국 통과하지 못했다.

pypy3으로 제출했을때 겨우 통과했다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import sys
 
 
class Queue():
    def __init__(self):
        self.list=[]
        self.tail=0
        self.top=0#시간초과로 인해 pop의 경우 제거대신 top을 움직임
 
 
    def push(self,num):
        self.list.append(num)
        self.tail+=1
 
 
    def pop(self):
        if self.tail-self.top==0:
            return -1
        pop_result=self.list[self.top]
        self.top+=1
        return pop_result
 
    def size(self):
        return self.tail-self.top
 
    def empty(self):
        return 0 if self.tail-self.top else 1
 
    def front(self):
        if self.tail-self.top==0:
            return -1
        return self.list[self.top]
 
    def back(self):
        if self.tail-self.top==0:
            return -1
        return self.list[self.tail-1]
 
 
 
num=int(input())
queue=Queue()
command=[list(sys.stdin.readline().split()) for _ in range(num)]
 
 
for i in range(num):
    if command[i][0== "push":
        queue.push(command[i][1])
    elif command[i][0== "pop":
        print(queue.pop())
    elif command[i][0== "size":
        print(queue.size())
    elif command[i][0== "empty":
        print(queue.empty())
    elif command[i][0== "front":
        print(queue.front())
    elif command[i][0== "back":
        print(queue.back())

cs


제출 결과를 보니 파이썬으로 통과한 사람들이 꽤있었다.
코드를 살펴보니 대부분 collections모듈의 deque를 사용하고 있었다.
collections.deque를 찾아보니 여러가지 함수가 포함되어있는데
일반적인 스택과 큐는 물론 회전큐를 위한 함수도 있었다.
이번에는 따로 이 모듈을 다루지 않겠지만 밑에문제에서 써야될거 같다.


반응형

'알고리즘(python) > 자료구조' 카테고리의 다른 글

[Python]Queue 백준 11866  (0) 2020.01.16
[Python]Queue 백준 2164  (0) 2020.01.15
[Python]Stack 백준 1874  (0) 2019.12.15
[Python]Stack 백준 4949  (0) 2019.12.14
[Python]Stack 백준 9012  (0) 2019.12.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기