CS/알고리즘_문제풀이(파이썬)

원형큐 구현하기

Jedy_Kim 2021. 5. 26. 14:51
728x90

문제

이 문제에서는 원형 큐를 구현한다. 선형 큐는 “큐가 실제로는 비어있어도 Push와 Pop을 할 수 없는" 문제가 발생할 수 있다. 원형 큐는 이 문제를 해결한다. 원형 큐 역시 큐와 마찬가지로 다음 세 개의 연산을 지원한다.

  • Push X : 큐에 정수 X를 push한다. 만약 rear 포인터가 더 이상 뒤로 갈 수 없다면, “Overflow”를 출력한다.
  • Pop : 큐에서 정수 하나를 pop한다. 만약 front 포인터가 더 이상 뒤로 갈 수 없다면, “Underflow”를 출력한다.
  • Front : 큐의 front에 있는 정수를 출력한다. 만약 큐가 비어있다면 “NULL”을 출력한다.

크기가 n인 원형 큐에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Front는 “3”으로 표현한다. 아래 예제를 보면 크기 4인 큐에 15개의 연산이 입력으로 주어졌을 때의 입력과 출력의 예가 적혀있다. 참고로, 다음 연산은 “큐 구현하기" 문제와 동일하지만, 선형 큐의 문제를 잘 해결한다는 것에 주목하자.

 

입력

첫째 줄에 큐의 크기 n, 연산의 개수 m이 주어진다. ( 1 ≤ n ≤ 100, 1 ≤ m ≤ 1,000 ) 두 번째 줄부터 연산이 주어진다. 1은 Push, 2는 Pop, 3은 Front 연산을 의미한다.  

출력

연산의 결과를 출력한다.

 

예제 입력

4 15

1 1

1 2

1 3

3

2

2

3

1 4

1 5

3

2

2

1 6

2

3

예제 출력

1

3

3

6

 

#코드

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
59
60
61
import sys
 
class Queue:
  CONST_MAX = 100000
  data = [0 for _ in range(CONST_MAX)]
  f, r = 00
  capacity = 0
  numElement = 0
  
  def create(self, y):
    self.capacity = y
    self.f = 0
    self.r = 0
    self.numElement = 0
  
  def push(self, y):
    if self.numElement >= self.capacity:
      print('Overflow')
    else:
      self.data[self.r] = y 
      self.r = (self.r+1) % self.CONST_MAX # 위의 주석과 같다.
      self.numElement+=1
  def pop(self):
    if self.numElement <= 0:
      print('Underflow')
    else:
      self.data[self.f] = 0 
      self.f = (self.f + 1) % self.CONST_MAX
      self.numElement -= 1
  def front(self):
    if self.numElement <= 0:
      return -1
    else:
      return self.data[self.f]
  def size(self):
    return self.numElement
 
 
if __name__ == "__main__":
  n, m = map(int, sys.stdin.readline().split())
  getInfo = []
  q_list  = []
  
  for i in range(m):
    row = list(map(int, sys.stdin.readline().split()))
    getInfo.append(row)
  
  qq = Queue()
  qq.create(n)
  
  for i in getInfo:
    if i[0== 1:   # push
      qq.push(i[1])
    elif i[0== 2# pop 
      qq.pop()
    elif i[0== 3# front
      res = qq.front()
      if res == -1:
        print('NULL')
      else:
        print(res)
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

공통 조상 찾기  (0) 2021.05.27
트리 순회 결과 출력하기  (0) 2021.05.27
괄호의 값  (0) 2021.05.26
회전탑  (0) 2021.05.26
검증수  (0) 2021.05.25