조합을 통해 모든 경우의 수를 찾고 조건에 맞는지 찾는 문제이다. (프로그래머스 level2)
문제는 다음과 같다.
단체사진 찍기
처음에 봤을땐 확률과 통계 풀듯이 뭐 N과 F사이에 0을 넣어줘야되나? 뭐 이런 생각이 들었다.
하지만 이건 사람이나 할수있는 일이고
컴퓨터로는 모든 경우의 수에 대해서 조건만 맞는지 확인해주면 된다.
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool isRight(int diff, int real, char sign)
{
if(sign == '=') return diff == real;
else if(sign == '<') return real < diff;
else if(sign == '>') return real > diff;
}
int solution(int n, vector<string> data) {
int answer = 0;
string friends = "ACFJMNRT";
do{
bool flag = true;
for(int i=0; i<n; i++)
{
string nowStr = data[i];
char f = nowStr[0];
char s = nowStr[2];
char sign = nowStr[3];
int diff = nowStr[4]-48;
int fIdx = -1, sIdx = -1;
for(int j=0; j<8; j++)
{
if(friends[j] == f) fIdx = j;
else if(friends[j] == s) sIdx = j;
}
int tmpDiff = abs(fIdx-sIdx)-1;
if(!isRight(diff, tmpDiff, sign)) {
flag=false;
break;
}
}
if(flag) answer++;
}while(next_permutation(friends.begin(), friends.end()));
return answer;
}