프로그래머스 단체사진 찍기 (Java,자바)

jonghyukLee·2022년 5월 17일
0

이번에 풀어본 문제는
프로그래머스 단체사진 찍기 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    static char [] friends;
    static String [] dt;
    static int answer;
    static boolean [] visited;
    public int solution(int n, String[] data) {
        dt = data;
        answer = 0;
        friends = new char[]{'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
        visited = new boolean[8];

        dfs("",0);
        return answer;
    }
    static void dfs(String line, int depth)
    {
        if(depth == 8)
        {
            if(check(line)) answer++;
            return;
        }

        // depth -> 자리(인덱스) , i -> 프렌즈
        for(int i = 0; i < 8; ++i)
        {
            //아직 줄을 서지 않은 프렌즈면 세우고 재귀
            if(!visited[i])
            {
                visited[i] = true;
                dfs(line+friends[i],depth+1);
                visited[i] = false;
            }
        }
    }
    static boolean check(String line)
    {
        //"N~F=0", "R~T<2"
        for(String cond : dt)
        {
            //둘사이의 거리
            int diff = (Math.abs(line.indexOf(cond.charAt(0)) - line.indexOf(cond.charAt(2))))-1;
            char sign = cond.charAt(3);
            int val = cond.charAt(4)-'0';

            if(sign == '=')
            {
                if(diff != val) return false;
            }
            else if(sign == '>')
            {
                if(diff <= val) return false;
            }
            else
            {
                if(diff >= val) return false;
            }
        }
        //걸리지지 않았다면 true
        return true;
    }
}

📝 풀이

조건에 맞추어 프렌즈를 줄세우는 모든 경우의수를 구하는 문제입니다.
줄을 세울 수 있는 모든 경우를 구한 뒤, 조건과 비교하여 일치한다면 카운트를 올려주는 방법으로 풀어보았습니다.

📜 후기

프렌즈가 많았으면 어려웠을 문제 같습니다.. 다행이네요

profile
머무르지 않기!

0개의 댓글