본문 바로가기
Problem Solving/Baekjoon

[백준] 1342 행운의 문자열 - Brute Force / Java

by graycode 2023. 7. 18.

 문제 링크

 

1342번: 행운의 문자열

민식이와 준영이는 자기 방에서 문자열을 공부하고 있다. 민식이가 말하길 인접해 있는 모든 문자가 같지 않은 문자열을 행운의 문자열이라고 한다고 한다. 준영이는 문자열 S를 분석하기 시작

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    static int len, cnt;
    static int[] arr = new int[26];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String s = br.readLine();
        len = s.length();

        for (int i = 0; i < len; i++)
            arr[s.charAt(i) - 'a']++;

        dfs(0, 0);

        bw.write(String.valueOf(cnt));
        bw.flush();
    }

    private static void dfs(int prev, int depth) {
        if (depth == len) {
            cnt++;
            return;
        }

        for (int i = 0; i < 26; i++) {
            if (arr[i] == 0 || (prev == i && depth != 0)) continue;

            arr[i]--;
            dfs(i, depth + 1);
            arr[i]++;
        }
    }

}

댓글