백준 12789번 : 도키도키 간식드리미

2024. 5. 29. 23:18개인활동/코테

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

 

어렵다.

이런 문제도 풀어야하는데... 머리가 안돌아간다. 최대한 다른 사람 코드를 안보고 내 손으로 짜보고 싶었지만..

야밤에 배도 고프고 머리가 안돌아가서 다른 분들의 코드를 참고하였다.

 

그리고 충격적인 사실. 이렇게 간단한 문제라고?

n = int(input())
array = list(map(int, input().split()))
stack = []
number = 1

for i in array:
    stack.append(i)
    # print(f"i : {i}, array : {array}, stack : {stack}, number : {number}")
    while stack and stack[-1] == number:
        stack.pop()
        number += 1
        # print(f"stack : {stack}, number : {number}")
if stack:
    print("Sad")
else:
    print("Nice")

입력받은 array는 그냥 냅두고, stack에 온전히 차곡차곡 쌓으며 순번과 일치하는 경우 pop, 일치하지 않으면 pass

 

아. 너무 복잡하게 생각하였다.

 

나의 논리는 아래와 같았다.

1. 입력받은 array에서 차례대로 숫자를 꺼낼 때, 순번과 일치하지 않는다면 stack에 집어넣는다.

2. 이 stack도 순회하며 순번과 일치하는 경우 숫자를 빼낸다.

 

그러나 이 논리에서는 stack을 어디서 어떤 조건으로 순회할 것인지가 가장 큰 문제였던 것으로 보인다.

 

이렇게 또 하나를 배워간다.


참고 코드 :

https://chaeyami.tistory.com/177

 

[백준] 12789번 : 도키도키 간식드리미 (스택/큐 실버Ⅲ) - Python

문제 https://www.acmicpc.net/problem/12789 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다

chaeyami.tistory.com