본문 바로가기
Algorithm/프로그래머스풀이

[알고리즘 문제풀이] 프로그래머스 - 단체사진 찍기 / JAVA(자바)

by 계범 2022. 2. 24.

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

 

코딩테스트 연습 - 단체사진 찍기

단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두

programmers.co.kr

/**
    1. 전체 경우의 수를 파악(8명이 있으므로, 8!)
    
    2. 경우의 수마다 조건에 맞는 안맞는지 확인
    
    3. 조건에 맞는 개수 반환
**/

class Solution {
    
    public int answer = 0;
    public boolean[] visited = new boolean[8];
    public int solution(int n, String[] data) {
        
        dfs(0,"",data);
        
        return answer;
    }
    
    public void dfs(int stage, String sequence,String[] data){
        
        if(stage == 8){
            if(check(sequence,data)){
                answer++;
            }
            return;
        }
        
        for(int i = 0; i < 8; i++){
            if(visited[i] == false){
                visited[i] = true;
                dfs(stage+1,sequence+String.valueOf(i),data);
                visited[i] = false;
            }
        }
    }
    
    public boolean check(String sequence,String[] data){
        
        String str = parsing(sequence);
        
        for(String s : data){
            
            char start = s.charAt(0);
            char end = s.charAt(2);
            char condition = s.charAt(3);
            int num = s.charAt(4) - '0';
            
            int first = str.indexOf(start);
            int second = str.indexOf(end);
            
            int distance = Math.abs(first - second)-1;
            
            if(condition == '='){
                if(distance != num) return false;
            }else if(condition == '<'){
                if(distance >= num) return false;
            }else{
                if(distance <= num) return false;
            }
        }
        
        return true;
    }
    
    public String parsing(String sequence){
        
        sequence = sequence.replace("0","A")
            .replace("1","C")
            .replace("2","F")
            .replace("3","J")
            .replace("4","M")
            .replace("5","N")
            .replace("6","R")
            .replace("7","T");
        
        return sequence;
    }
}

댓글