https://programmers.co.kr/learn/courses/30/lessons/1835
- friends = "ACFJMNRT" 를 정렬하는 모든 경우의 수를 구하기
- 해당하는 경우에 data조건을 만족하는지 확인한다.
만족하면 answer+1를 해주는 방식으로 풀면 된다.
=> next_permutation을 사용하는 것이 핵심!
=> string의 find 속성을 알고 인덱스를 구해내는 것도 필요하다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
bool checkCondition(char opr, int num, int diff) {
if(opr == '=')
return num == diff;
else if(opr == '>') return diff > num;
else return diff < num;
}
int solution(int n, vector<string> data) {
int answer = 0;
string friends = "ACFJMNRT";
vector<vector<char>> s;
sort(friends.begin(), friends.end());
do{
bool check = true;
for(string text: data){
int firstIdx = friends.find(text[0]); // N의 위치
int secondIdx = friends.find(text[2]); // F의 위치
int diff = abs(firstIdx - secondIdx)-1; // N과 F의 차이
cout << diff << endl;
int num = text[4] - '0'; //
if(checkCondition(text[3], num, diff)) continue;
check = false;
break;
}
if(check) answer++;
}while(next_permutation(friends.begin(), friends.end()));
return answer;
}
int main() {
int n = 2;
vector<string> data = {"N~F=0", "R~T>2"};
// vector<string> data = {"M~C<2", "C~M>1"};
solution(n, data);
return 0;
}
우왕..