ALGORITHM/PROGRAMMERS

[프로그래머스] 단체사진 찍기 (2017 카카오코드 본선)

0298 2021. 8. 7. 21:25

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

 

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

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

programmers.co.kr

2021-08-07


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
 static String[] arr = {"A""C""F" , "J""M""N""R""T"};
    static String[] da;
    static boolean[] vtd;
    static int answer;
 
    static boolean check(String str) {
        for(int i = 0; i < da.length; i++) {
            String a = String.valueOf(da[i].charAt(0));
            String b = String.valueOf(da[i].charAt(2));
            String op = String.valueOf(da[i].charAt(3));
            int num = Character.getNumericValue(da[i].charAt(4));
 
            int cal = Math.abs(str.indexOf(a) - str.indexOf(b)) - 1;
            switch (op) {
                case "=":
                if(cal != num) return false;
                    break;
                case ">":
                    if(cal <= num) return false;
                    break;
                case "<":
                    if(cal >= num) return false;
                    break;
            }
        }
 
        return true;
    }
    static void solve(String str, int cnt) {
        if(cnt == arr.length) {
            if(check(str)) answer++;
            return;
        }
        for(int i = 0; i < arr.length; i++) {
            if(!vtd[i]) {
                vtd[i] = true;
                solve(str+arr[i], cnt+1);
                vtd[i] = false;
            }
        }
    }
    static int solution(int n, String[] data) {
        answer = 0;
        vtd = new boolean[arr.length];
        da = data;
        solve(""0);
        return answer;
    }
}
cs

#문제풀이

만들 수 있는 모든 조합을 만든 후, 조건에 맞는 것들만 카운트 했다.