[백준] 9742: 순열 _ JAVA

아로롱·2024년 12월 1일

algorithm

목록 보기
6/25

📍 문제

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

답안 코드


import java.io.*;
import java.util.*;

public class Main {

    static int cnt;
    static String answer;
    static char[] arr;
    static boolean[] visited;

    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 line;

        while((line = br.readLine()) != null) {
            cnt = 0;
            answer = null;
            StringTokenizer st = new StringTokenizer(line);
            String testCase = st.nextToken();
            int n = Integer.parseInt(st.nextToken());

            arr = new char[testCase.length()];
            visited = new boolean[testCase.length()];

            dfs(0, testCase, n);
            StringBuilder sb = new StringBuilder();
            sb.append(testCase).append(" ").append(n).append(" = ");

            if(answer == null)
                sb.append("No permutation");
            else
                sb.append(answer);

            bw.write(String.valueOf(sb));
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }

    private static void dfs(int depth, String str, int n) {
        if (depth == str.length()) {
            cnt++;
            if(cnt == n) {
                answer = new String(arr);
                return;
            }
            return;
        }
        for(int i = 0; i < str.length(); i++) {
            if(!visited[i]) {
                visited[i] = true;
                arr[depth] = str.charAt(i);
                dfs(depth+1, str, n);
                visited[i] = false;
            }
        }
    }
}

profile
Dilige, et fac quod vis

0개의 댓글