https://www.acmicpc.net/problem/9742
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
static int totalCount, N;
static boolean isSelected[]; // 중복 방지 위해 방문했는지 체크하는 배열
static char[] chars; // 문자를 담을 배열
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();
N = Integer.parseInt(st.nextToken());
totalCount = 0;
chars = new char[str.length()];
isSelected = new boolean[str.length()];
dfs(str, 0);
if(totalCount < N) answer = "No permutation";
System.out.println(str + " " + N + " = " + answer);
}
}
static void dfs(String str, int cnt){ // cnt = 현재 크기
// 종료 조건
if(cnt==str.length()){ // 크기가 str과 같아지면 totalCount++
totalCount++;
if(totalCount == N) answer = new String(chars); // 문자배열 -> string 으로 변환
return;
}
//확장
for(int i=0; i<str.length(); i++){ // 문자열 탐색
if(!isSelected[i]){ // 방문 전 이라면
isSelected[i]=true;
chars[cnt]=str.charAt(i); // 현재크기 = 현재위치에 i넣어줌
dfs(str, cnt+1); // 넣어줬으니까 cnt+1
isSelected[i]=false; // 빠져나왔으니 false
}
}
}
}
// 입력 문자열을 정렬
char[] sortedChars = str.toCharArray();
Arrays.sort(sortedChars);
String sortedStr = new String(sortedChars);