PS
BOJ 12789 : 도키도키 간식드리미
lickelon
2025. 2. 8. 22:56
- 문제 링크 : boj.kr/12789
- 난이도 : S3
- 태그 : 스택
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<int> arr(n);
for(auto &e : arr) cin >> e;
stack<int> _st;
int target = 1;
for(auto e : arr) {
if(e == target) target++;
else _st.push(e);
while(!_st.empty() && _st.top() == target) {
_st.pop();
target++;
}
}
cout << (_st.empty() ? "Nice" : "Sad");
return 0;
}
풀이
우회로는 스택, 진입로는 큐처럼 작동한다.
진입로의 선두가 간식을 받을 수 있다면 pass, 아니라면 스택에 push한다.
이후 우회로의 선두가 간식을 받을 수 없을 때까지 우회로의 선두에게 간식을 나눠주고 pass한다.
최종적으로 우회로에 사람이 남아있다면 모두에게 간식이 주어지지 않은 것이다.
728x90