1. ๋ฌธ์ œ : https://www.acmicpc.net/problem/1062

 

2. ํ’€์ด

์™„์ „ํƒ์ƒ‰ (๋ฐฑํŠธ๋ž˜ํ‚น) ๋ฌธ์ œ์ž„์„ ์•Œ์•˜์ง€๋งŒ ๊ตฌํ˜„์ด ์–ด๋ ค์› ๋‹ค.

ํƒ์ƒ‰ ๋Œ€์ƒ์ด ๋‚˜์™€์žˆ๋Š” ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค๋ฉด ์ข€ ๋” ์ง„์ „์ด ์žˆ์—ˆ์„ ์ˆ˜๋„..

 

for๋ฌธ์„ ๋Œ๋ฉฐ dfs๋ฅผ ์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ค‘์š”ํ–ˆ๋‹ค. (์ด๋ ‡๊ฒŒ๋˜๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๋”ฐ์งˆ ์ˆ˜ ์žˆ๋‹ค.)

 

์ฃผ์–ด์ง„ K๋งŒํผ ์•ŒํŒŒ๋ฒณ์„ ๋‹ค ๋ฐฉ๋ฌธํ•˜๋ฉด (count == K)

๋‹จ์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ๊ฐ ๋‹จ์–ด์˜ ์ฒ ์ž๊ฐ€ visted ํ‘œ์‹œ๊ฐ€ ๋œ ์•ŒํŒŒ๋ฒณ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

๋งŒ์•ฝ ๋‹ค ๋ฐฉ๋ฌธ๋œ ์ฒ ์ž๋ผ๋ฉด rs๊ฐ’์„ ์˜ฌ๋ ค์ฃผ๊ณ 

์ตœ๋Œ€๊ฐ’๊ณผ ๋น„๊ตํ•ด์ฃผ๋ฉด์„œ max value๋ฅผ ์—…๋ฐ์ดํŠธ!

 

3. ์ฝ”๋“œ

import java.util.*;

class Main {
    static int N,K;
    static int max = 0;
    static boolean visit[] = new boolean[26];
    static String[] arr;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        N = scanner.nextInt();
        K = scanner.nextInt();

        arr = new String[N];

        if(K<5) {
            System.out.println(0);
            return;
        }else if(K==26) {
            System.out.println(N);
            return;
        }else {
            for (int i = 0; i < N; i++) {
                String str = scanner.next();
                arr[i] = str.substring(4, str.length() - 4);
            }
            K -= 5;
            visit['a' - 97] = true;
            visit['n' - 97] = true;
            visit['t' - 97] = true;
            visit['i' - 97] = true;
            visit['c' - 97] = true;
            dfs(0, 0);
            System.out.println(max);
        }
    }

    private static void dfs(int start, int count) {
        if(count == K) {
            int rs = 0;
            for(int i=0; i<N; i++) {
                boolean isTrue = true;
                for(int j=0; j<arr[i].length(); j++) {
                    if(!visit[arr[i].charAt(j)-97]) {
                        isTrue = false;
                        break;
                    }
                }
                if(isTrue) {
                    rs++;
                }
            }
            max = Math.max(max, rs);
            return;
        }

        for(int i=start; i<26; i++) {
            if(!visit[i]) {
                visit[i]=true;
                dfs(i, count+1);
                visit[i]=false;
            }
        }
    }
}
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ