본문 바로가기

백준12789 - 도키도키 간식드리미 (스택) Python 본문

개발/algorithm

백준12789 - 도키도키 간식드리미 (스택) Python

자전하는명왕성 2023. 11. 13. 09:40

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

문제는 입력값이 '순번'을 담고 있을 때, 해당 순번이 '스택'을 이용하여 오름차순으로 정렬할 수 있는지를 묻는다.

(스택이 무엇인지는 해당 포스팅에서 따로 다루진 않는다.)

 

풀이 과정은 다음과 같다.

 

먼저, 스택을 통과하여 결괏값을 저장하기 위한 리스트 | 스택의 역할을 할 리스트를 선언했다. 

이때, 결괏값 리스트는 오름차순으로 정렬될 것이므로 미리 0을 포함시켜두었다.

 

이후 반복문을 통해, 해당 값이 결괏값 리스트의 마지막 값보다 1 큰지 검증하여 (오름차순이므로),

해당 검증이 옳다면 결괏값 리스트에 추가 | 그렇지 않다면 스택에 추가한다.

 

이때 스택에 마지막에 추가된 값이 다음 결괏값 리스트에 들어가야 할 정렬된 값일 수 있으므로

무한반복문을 통해 특정 조건이 맞으면 결괏값 리스트에 추가할 수 있게 해주었다.

 

이후 스택이 비어있는지 아닌지에 따라 값을 출력했다.

 

import sys
data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = data_temp.read().splitlines()

def solution (data) :
  arr = list(map(int, data[1].split()))
  goal = [0]
  stack = []
  for v in arr :
    if goal[-1] + 1== v :
      goal.append(v)
    else : 
      stack.append(v)

    while stack :
      if goal[-1] + 1== stack[-1] :
        goal.append(stack.pop())
      else : break

  print('Nice' if not stack else 'Sad')


solution(input_data)

 

Comments