https://www.acmicpc.net/problem/15501
동일한 수열이기 위해서는 동일한 순서로 존재해야 합니다. 만약 동일한 순서가 아니라면 뒤집혔을 수도 있다는 것이므로 뒤집은 뒤에 동일한 순서이면 됩니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<int> seq1, seq2;
void initSeq(vector<int> &seq)
{
seq = vector<int>(n);
for (int &i : seq)
{
cin >> i;
}
}
bool isGoodPuzzle()
{
int index = 0;
while (true)
{
if (seq1[0] == seq2[index])
{
break;
}
++index;
}
if (seq1[1] == seq2[(index + 1) % n])
{
for (int i = 2; i < n; ++i)
{
if (seq1[i] != seq2[(index + i) % n])
{
return false;
}
}
return true;
}
else if (seq1[n - 1] == seq2[(index + 1) % n])
{
for (int i = 2; i < n; ++i)
{
if (seq1[n - i] != seq2[(index + i) % n])
{
return false;
}
}
return true;
}
else
{
return false;
}
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> n;
initSeq(seq1);
initSeq(seq2);
cout << (isGoodPuzzle() ? "good puzzle" : "bad puzzle");
return 0;
}
동일한 수를 사용하는 인덱스를 찾고 해당 인덱스를 기준으로 주변 수를 확인하여 방향을 확인한 뒤 동일한 순서로 수가 존재하는지 확인해 주면 됩니다.