안녕하세요. 오늘은 간식을 줄 거예요.
https://www.acmicpc.net/problem/12789
그림의 아래쪽에 나온 부분을 스택으로 만들면 됩니다.
현재 줄에 서있는 사람이 현재 받아야할 사람이라면 체크를 하고 스택에서도 가능한지 확인을 합니다.
아니면 스택에 넣어줍니다.
맨 마지막에 다 받았는지 확인해주면 됩니다.
#include <iostream>
#include <stack>
#define ll long long
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
ll x, N, i, cnt = 1;
stack <ll> stk;
cin >> N;
for (i = 1; i <= N; i++)
{
cin >> x;
if (x == cnt)
{
cnt++;
while (stk.size() && stk.top() == cnt)
{
cnt++;
stk.pop();
}
}
else
stk.push(x);
}
if (cnt == N + 1) cout << "Nice";
else cout << "Sad";
}
감사합니다.