[백준 12789] 도키도키 간식드리미

alsry._.112·2023년 10월 6일
0

백준

목록 보기
76/102

🔗문제 풀러가기
단계별로 풀어보기 단계 16의 5번째 문제이다.

문제 분석

Stack 컨테이너를 사용해서 문제를 해결하였다.

코드

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	stack<int> st;
	int n, input, cnt = 1;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> input;

		if (input == cnt) cnt++;
		else st.push(input);

		while (!st.empty() && st.top() == cnt)
		{
			st.pop();
			cnt++;
		}
	}

	if (st.empty()) cout << "Nice";
	else cout << "Sad";
}

해석

  1. 입력받은 수 만큼 반복문을 돌며 수를 입력받는다.
  2. 만약 입력받은 수가 cnt와 같다면(입력받은 수 == 현재 순서)순서를 나타내는 cnt만 ++하고 아니라면(입력받은 수 != 현재 순서) stack에 저장한다.
  3. 그 후 스택이 전부 사라질때까지 반복문을 돌며 현재 스택의 top이 cnt라면(top이 현재 순서라면) stack에서 지워주고 순서를 나타내는 cnt를 ++하여준다.
  4. stack이 비워져있다면(입력받은 모든 수가 순서에 맞게 처리되었다면) "Nice"를 출력하고, 그렇지 않다면 "Sad"를 출력하면 끝!
profile
소통해요

0개의 댓글