https://www.acmicpc.net/problem/9742
9742번: 순열
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 문자열은 서로 다른 숫자와 알파벳으로 이루어져 있으며, 길이는 최대 10이다. 또한, 사전
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
    private static int totalCount, num;
    private static boolean visit[]; // 중복 방지 위해 방문했는지 체크하는 배열
    private static char[] chars; // 값을 담을 배열
    private static String answer;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line=br.readLine())!=null){
            StringTokenizer st = new StringTokenizer(line);
            String str = st.nextToken();
            num = Integer.parseInt(st.nextToken());
            totalCount=0;
            chars=new char[str.length()];
            visit=new boolean[str.length()];
            dfs(str, 0);
            if(totalCount<num) answer="No permutation";
            System.out.println(str+" "+num+" = "+answer);
        }
    }
    private static void dfs(String str, int cnt){
        if(cnt==str.length()){
            totalCount++;
            if(totalCount==num) answer=new String(chars);
            return;
        }
        for(int i=0; i<str.length(); i++){
            if(!visit[i]){
                visit[i]=true;
                chars[cnt]=str.charAt(i);
                dfs(str, cnt+1);
                visit[i]=false;
            }
        }
    }
}
N과 M문제들과 비슷한데
이 문제는 순열이 만들어질때마다 totalCount를 하나씩 증가시켜 입력받은 num과 같아질때의 순열을 출력한다.
반응형
    
    
    
  'ALGORITHM' 카테고리의 다른 글
| [JAVA] 백준 10757번- 큰 수 A+B (0) | 2022.08.22 | 
|---|---|
| [JAVA] 알고리즘 : DFS- 부분집합 구하기 (0) | 2022.08.22 | 
| [JAVA] 백준 15651번- N과 M(3) (0) | 2022.08.21 | 
| [JAVA] 백준 15650번- N과 M(2) (0) | 2022.08.20 | 
| [JAVA] 알고리즘 : DFS- 이진트리순회 (0) | 2022.08.15 |