4가지 조건을 충족하는지 확인하는 문제입니다.
하지만 첫 번째 조건인 '재료는 아래에서 위로 쌓는다.'은 입력에서부터 충족된 상태로 들어오기에 확인할 필요가 없습니다.
확인해야 할 조건은 2~4번째 조건입니다.
#include <iostream>
using namespace std;
int N, cnt[4];
string S;
void input()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
for (int i = 0; i < 4; ++i)
{
cin >> cnt[i];
}
cin >> S;
}
bool solve()
{
if (!(S.front() == S.back() && S.front() == 'a'))
{
return false;
}
for (int i = 0; i < N; ++i)
{
if (--cnt[S[i] - 'a'] < 0)
{
return false;
}
if (i > 0 && S[i] == S[i - 1])
{
return false;
}
}
return true;
}
int main()
{
input();
cout << (solve() ? "Yes" : "No");
return 0;
}
문자열의 첫 번째, 마지막이 빵인지 확인한 뒤 반복문을 통해 가진 재료 이상으로 재료가 요구되는지, 이전 재료와 연속되는지 확인하면 됩니다.