티스토리 뷰

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

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

 

 

👩‍💻문제 이해

위에 있는 숫자들을 무시한 채 밑에 깔린 숫자를 먼저 출력하는 것은 불가능하기 때문에 가장 위쪽의 숫자(TOP)가 입력된 숫자와 같지 않을 경우 스택을 만들 수 없다. 따라서 반복문 안에서 li.pop() != int(input()) 일 경우 -> NO 출력! 

 

 

 

👩‍💻재귀함수를 사용한 코드 : 성공🌈

# 1874번 : 스택 수열


n = int(input())
li = [] 
for i in range(n):
  li.append(int(input()))

add = 1
empty = []
res = []
can = 0

for i in range(n):
  while add <= li[i]:
    empty.append(add)
    res.append('+')
    add += 1

  if empty[-1] == li[i]:
    res.append('-')
    empty.pop()
  
  else:
    print('NO')
    can = 1
    break;

if can == 0:
  for i in range(len(res)):
    print(res[i])

 

 

# 1874번 : 스택 수열

n = int(input())
li = [] 
# 입력 숫자들을 넣을 list
for i in range(n):
  li.append(int(input()))

add = 1
empty = []
res = []
can = 0

for i in range(n):
  while add <= li[i]: 
  # empty리스트에 추가할 숫자가 입력받은 숫자리스트의 숫자와 같을 때까지
    empty.append(add)
    res.append('+')
    add += 1
    # empty 리스트에 숫자 add를 추가 하고 결과값 list에 부호'+' 추가

  if empty[-1] == li[i]:
    res.append('-')
    empty.pop()
    
  # empty 리스트의 TOP과 현재 list의 숫자가 같을 경우 pop
  
  else:
    print('NO')
    can = 1
    break;
    
  # empty 리스트의 TOP과 현재 list의 숫자가 같지 않을 경우 stack을 만들 수 없다.

if can == 0:
  for i in range(len(res)):
    print(res[i])

 

 

Point

stack 구조에서는 가장 위쪽의 숫자를 pop 하지 않고 밑에 있는 숫자를 꺼낼 수 없다.
댓글
최근에 올라온 글
«   2024/09   »
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
Total
Today
Yesterday