프로그래머스 - 단체사진 찍기

‍bng4535·2023년 3월 17일
0

문제

https://www.acmicpc.net/problem/1835

풀이

  • 8명이 설 수 있는 모든 경우에 대해서 각 조건을 모두 만족하는지 확인하면 된다.

유의할 점

  • int 와 char을 비교해서 시간을 많이 소모했다. 코드를 꼼꼼히 확인하자

코드


import java.util.*; 
class Solution {
     static boolean[] visited;
    static HashMap<Character, Integer> map = new HashMap<>();
    static String[] d;
    static int answer=0;
    static char[] characters = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    
    public int solution(int n, String[] data) {
        answer=0; 
        d= data; 
        visited = new boolean[8]; 
        dfs(0);
        return answer;
    }
    
    static void dfs(int len){
            if(len == 8) {
                for(String s : d){
                    char a = s.charAt(0);
                    char b= s.charAt(2);
                    char op = s.charAt(3);
                    int gap = s.charAt(4)-'0';
                    int g =  (int)Math.abs(map.get(a)- map.get(b))-1;
                    if(op == '>'){
                        if(gap >= g) return;
                    } else if(op == '='){
                        if(gap != g) return;
                    } else if(op=='<') {
                        if(gap <= g) return;
                    }
                }
                answer++;
                return;
            }
            for(int i=0; i<8; i++){
                if(visited[i]) continue;
                visited[i] = true;
                map.put(characters[i], len);
                dfs(len+1);
                visited[i] = false;
            }
        }
}
profile
공부 기록

0개의 댓글