문제
문제점 해결
permutation을 사용해 풀 수 있는 문제였다.
먼저 set에 8! 가지의 경우를 모두 저장한 뒤, 하나씩 꺼내어 data에 나와있는 조건에 모두 부합하는지 확인하여 answer값을 증가시킨다.
풀이
import java.util.*;
class Solution {
static Set<String> set;
static boolean[] used;
static List<String> list;
static String[] friends = {"A", "C", "F", "J", "M", "N", "R", "T"};
public int solution(int n, String[] data) {
int answer = 0;
set = new HashSet<>();
used = new boolean[friends.length];
list = new ArrayList<>();
permutation();
Iterator<String> it = set.iterator();
int c1, c2, res, value;
while(it.hasNext()) {
String str = it.next();
boolean flag = false;
for (int i = 0; i < n; i++) {
flag = false;
String d = data[i];
c1 = str.indexOf(d.charAt(0));
c2 = str.indexOf(d.charAt(2));
value = d.charAt(d.length()-1) - '0';
res = Math.abs(c1-c2) - 1;
if(d.contains("=") && res == value) {
flag = true;
}else if(d.contains(">") && res > value) {
flag = true;
}else if(d.contains("<") && res < value) {
flag = true;
}
if(!flag) break;
}
if(flag) answer++;
}
return answer;
}
static void permutation() {
if(list.size() == friends.length) {
StringBuilder sb = new StringBuilder();
for (String str : list) sb.append(str);
set.add(new String(sb));
return;
}
for (int i = 0; i < friends.length; i++) {
if(!used[i]) {
list.add(friends[i]);
used[i] = true;
permutation();
used[i] = false;
list.remove(friends[i]);
}
}
}
}