본문 바로가기

백준/C++

[C++] 백준 12789번 - 도키도키 간식드리미

728x90

 

문제 12789번

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

 

입력된 값을 확인하여 해당 순서라면 그냥 보내주고 다음 순서로 넘어간다. 만약 아니라면 해당 입력값을 스택에 저장해준다. 그리고 스택이 비어있지 않고 맨 위가 해당 순서라면 스택에서 제거해주고 다음 순서로 넘어간다. 학생 수만큼 반복해주고 스택이 비어있으면 Nice를, 아니면 Sad를 출력한다.

 

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

int main() {
	int n, count = 1;
	stack <int> st;
	cin >> n;
	while (n--) {
		int input;
		cin >> input;

		if (count == input) {	//입력된 값이 해당 순서이면 다음 순서로 넘어가기
			count++;
		}
		else {
			st.push(input);	//아니면 스택에 저장
		}

		while (!st.empty() && st.top() == count) {	// 스택이 비어있지 않고 맨 위의 수가 다음 순서이면 계속 반복
			st.pop();
			count++;
		}
	}
	if (st.empty()) {
		cout << "Nice";
	}
	else {
		cout << "Sad";
	}

	return 0;
}

 

 

728x90