[programmers] 단체사진 찍기

https://school.programmers.co.kr/learn/courses/30/lessons/1835

import java.util.*;

class Solution {
    String[] persons = new String[]{"A", "C", "F", "J", "M", "N", "R", "T"};
    boolean[] visited = new boolean[8];
    int answer = 0;

    public int solution(int n, String[] data) {
        Map<String,Integer> result = new HashMap<>();
        dfs(data, result, 0);
        return answer;
    }

    void dfs(String[] data, Map<String,Integer> result, int depth){
        if(depth == 8){
            if(isCheck(data, result)){
                answer++;
            }
        }else{
            for(int i = 0 ; i < 8 ; i++){
                if(!visited[i]){
                    visited[i] = true;
                    result.put(persons[i], depth);
                    dfs(data, result, depth+1);
                    visited[i] = false;
                }
            }
        }
    }

    boolean isCheck(String[] data, Map<String,Integer> result){
        for(String info : data){
            String[] arr = info.split("");
            int cnt = Integer.parseInt(arr[4]);
            int cal = Math.abs(result.get(arr[0]) - result.get(arr[2])) - 1;

            if(arr[3].equals(">")){
                if( cal <= cnt ) return false;
            }else if(arr[3].equals("<")){
                if( cal >= cnt ) return false;
            }else{
                if( cal != cnt ) return false;
            }
        }
        return true;
    }
}

© 2023 Lee. All rights reserved.