Skip to content

Latest commit

 

History

History
60 lines (51 loc) · 1.68 KB

File metadata and controls

60 lines (51 loc) · 1.68 KB

프로그래머스 Level2 : 2017 카카오코드 본선 단체사진 찍기

class Solution {
    String[] friends={"A","C","F","J","M","N","R","T"};
    int cnt = 0;
    
    //순열 만들기
    void dfs(String names, boolean[] isVisited, String[] datas){    
        if(names.length()==7){
            if(isCorrect(names,datas)){
                cnt++;
            }
            return;
        }
        
        for(int i=0; i<8; i++){
            if(!isVisited[i]){
                isVisited[i] = true;
                dfs(names+friends[i],isVisited,datas);
                isVisited[i] = false;
            }
        }
        
    }
    
    //제대로 줄섰는지 확인
    boolean isCorrect(String name, String[] datas){
        for(String d : datas){
            int position1 = name.indexOf(d.charAt(0));
            int position2 = name.indexOf(d.charAt(2));
            char sign = d.charAt(3);
            int distance = d.charAt(4)-'0';
            
            if(sign=='='){
                if(Math.abs(position1-position2)!=distance+1) return false;
            } else if(sign=='<'){
                if(!(Math.abs(position1-position2)<distance+1))
                    return false;
            } else{
               if(!(Math.abs(position1-position2)>distance+1))
                    return false;
            }  
        }
        return true;
    }
    
    public int solution(int n, String[] data) {
        int answer = 0;
        // 해당 프렌즈를 줄세웠는지
        boolean[] isVisited = new boolean[8];
        dfs("", isVisited, data);
        
        answer = cnt;
        return answer;
    }
}