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

스택 구현하기

Jedy_Kim 2021. 5. 24. 14:24
728x90

문제

이 문제에서는 스택을 구현한다. 스택은 다음 세 개의 연산을 지원한다.

  • Push X : 스택에 정수 X를 push한다. 만약 스택이 꽉 차서 push를 할 수 없다면, “Overflow”를 출력한다.
  • Pop : 스택에서 정수 하나를 pop한다. 만약 스택이 비어있어서 pop을 할 수 없다면, “Underflow”를 출력한다.
  • Top : 스택의 top에 있는 정수를 출력한다. 만약 스택이 비어있다면 “NULL”을 출력한다.

크기가 n인 스택에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Top은 “3”으로 표현한다.

 

입력

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

출력

연산의 결과를 출력한다.

 

예제 입력 1

4 10

1 1

1 2

1 3

2

3

1 4

1 5

3

1 6

3

예제 출력 1

2

5

Overflow

5

예제 입력 2

4 11

1 1

1 2

1 4

3

2

3

2

3

2

3

2

예제 출력 2

4

2

1

NULL

Underflow

 

#코드

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
import sys  
  
def push(data):
  global data_stack
  if len(data_stack) < n:
    data_stack.append(data)
  else:
    print('Overflow')
 
def pop():
  global data_stack
  if len(data_stack) > 0:
    del data_stack[-1]
  else:
    print('Underflow')
 
def top():
  if len(data_stack) > 0:
    print(data_stack[-1])
  else:
    print('NULL')
 
if __name__ == "__main__":
  n, m = map(int, sys.stdin.readline().split())
  getInfo    = list()
  data_stack = list()
  
  for _ in range(m):
    row = list(map(int, sys.stdin.readline().split()))
    getInfo.append(row)
    
  for i in getInfo:  
    # push
    if i[0== 1
      push(i[1])
    # pop
    elif i[0== 2:
      pop()
    # top
    elif i[0== 3:
      top()
cs

 

반응형

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

괄호  (0) 2021.05.24
접시  (0) 2021.05.24
조회 알고리즘  (0) 2021.05.23
2차원 조회  (0) 2021.05.23
1차원 조회  (0) 2021.05.23