만들수 있는 조합에서 주어진 조건에 따르는 경우를 계산해서 리턴해주면 되는 문제이다. 함수들만 잘활용한다면 크게 어렵지 않은 문제이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool checkData(string& s, vector<string>& data) {
for (auto& d : data) {
// 주어진 두 캐릭터의 거리를 구한다.
int size = abs(find(s.begin(), s.end(), d[0]) - find(s.begin(), s.end(), d[2])) - 1;
// 조건과 다르다면 return false;
if (d[3] == '=' && size != d[4] - '0') return false;
else if (d[3] == '>' && size <= d[4] - '0') return false;
else if (d[3] == '<' && size >= d[4] - '0') return false;
}
return true;
}
int solution(int n, vector<string> data) {
int answer = 0;
string s = "ACFJMNRT";// 초기 순서
do {
if (checkData(s, data)) answer++;
} while (next_permutation(s.begin(), s.end()));// 순열조합을 구해준다.
// next_permutation 사용할 떄 오름차순으로 정렬된걸 시작으로 사용해야한다는 점을 주의하자.
return answer;
}