사용한 것
풀이 방법
- 줄을 서는 경우의 수를 구한 뒤 조건을 확인한다.
 
코드
class Solution {
    int n;
    String[] data;
    String[] friends = {"A", "C", "F", "J", "M", "N", "R", "T"};
    Map<String, Integer> map = new HashMap<>();
    boolean[] visited = new boolean[8];
    int answer = 0;
    public int solution(int n, String[] data) {
        this.n = n;
        this.data = data;
        dfs(0);
        return answer;
    }
    void dfs(int depth) {
        if(depth == 8) {
            if(check()) {
                answer++;
            }
        }
        for(int i = 0; i < 8; i++) {
            if(!visited[i]) {
                visited[i] = true;
                map.put(friends[i], depth);
                dfs(depth + 1);
                visited[i] = false;
            }
        }
    }
    boolean check() {
        for(int i = 0; i < n; i++) {
            String line = data[i];
            int friend1 = map.get(line.substring(0, 1));
            int friend2 = map.get(line.substring(2, 3));
            int diff1 = Math.abs(friend1 - friend2) - 1;
            String op = line.substring(3, 4);
            int diff2 = Integer.parseInt(line.substring(4, 5));
            if(op.equals("=")) {
                if(diff1 != diff2) {
                    return false;
                }
            } else if(op.equals("<")) {
                if(diff1 >= diff2) {
                    return false;
                }
            } else {
                if(diff1 <= diff2) {
                    return false;
                }
            }
        }
        return true;
    }
}