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 |