https://www.acmicpc.net/problem/25705
동작이 정해져있고 동작 대로 실행했을 때 결과물이 나오는지, 결과물의 값은 얼마인지 확인하는 문제입니다.
그렇기에 동작을 구현하면 되는 문제입니다.
#include <iostream>
#include <queue>
using namespace std;
int N, M, cnt;
string S;
queue<char> q;
bool hasChar[26];
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
for (int i = 0; i < N; ++i)
{
char c;
cin >> c;
q.push(c);
hasChar[c - 'a'] = true;
}
for (int i = 0; i < N - 1; ++i)
{
q.push(q.front());
q.pop();
}
cin >> M >> S;
for (const char &c : S)
{
if (!hasChar[c - 'a'])
{
cout << -1;
return 0;
}
}
for (const char &c : S)
{
do
{
++cnt;
q.push(q.front());
q.pop();
} while (q.front() != c);
}
cout << cnt;
return 0;
}
회전, 문자 추가 또는 보류는 둘 중 하나만 하는 것이 아니라 무조건 둘 다 해야 되는 것입니다.
그렇기에 두 동작이 이루어지게 구현을 해주면 됩니다.
추가로 돌림판에 적혀있는 문자로만 문자열 S가 이루어졌다면 가능한 것이고 아니라면 불가능한 것입니다.