Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[문제풀이] B9742 순열 본문
순열
🪅 매 반복마다, 다음 반복에 영향을 주지 않게 초기화를 잘 하였는가
🪅 입력을 받지 못했을 때, NullPointException을 띄우지 않고 프로그램을 올바르게 종료시킬 수 있는가
🪅 순열을 구현할 수 있는가
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* 백준 9742번 순열
* 입력:
* 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다.
* 첫 번째 문자열은 서로 다른 숫자와 알파벳으로 이루어져 있으며, 길이는 최대 10이다. 또한, 사전순 순서대로 주어진다.
* 문자열 다음에는 찾아야 하는 위치가 주어지며, 이 값은 3,628,800보다 작거나 같은 자연수이다.
*
* 출력:
* 각각의 테스트 케이스마다, 입력으로 주어진 위치에 해당하는 순열을 공백없이 출력한다.
* 만약, 해당하는 순열이 없는 경우에는 "No permutation"을 출력한다.
*/
public class Main {
static char[] arr;
static int th;
static boolean[] isSelected;
static int[] selection;
static int cnt;
public static void permutation(int r) {
if(r == arr.length) {
if(++cnt == th) {
System.out.print(String.valueOf(arr) + " " + th + " = ");
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[selection[i]]);
}
System.out.println();
}
return;
}
for(int i = 0; i < arr.length; i++) {
if(isSelected[i]) continue;
isSelected[i] = true;
selection[r] = i;
permutation(r+1);
isSelected[i] = false;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String str = br.readLine();
if(str == null ) break;
StringTokenizer token = new StringTokenizer(str, " ");
arr = token.nextToken().toCharArray();
th = Integer.parseInt(token.nextToken());
isSelected = new boolean[arr.length];
selection = new int[arr.length];
cnt = 0;
permutation(0);
if(th > cnt) {
System.out.println(String.valueOf(arr) + " " + th +" = No permutation");
}
}
}
}
💡 문제 접근 방법
제목이 순열이란 것을 빼놓고 생각했을 때,
문자의 순서가 결과에 영향을 미치므로 순열로 구현해야겠다고 생각했다.
다만, 주의해야했던 점은 입력이 없었을 때 (str = null) 제대로 끝내는 방법과
매 반복마다 초기화를 적절히 했는가(cnt = 0)가 이 문제를 풀 수 있느냐 없느냐의 포인트였다.
'코딩 테스트 > 문제풀이' 카테고리의 다른 글
[문제풀이] B11725 트리의 부모 찾기 (0) | 2023.04.03 |
---|---|
[문제풀이] B1068 트리 (0) | 2023.04.02 |
[문제풀이] B2961 도영이가 만든 맛있는 음식 (0) | 2023.03.27 |
[문제풀이] B1759 암호만들기 (0) | 2023.03.27 |
[문제풀이] B15650 N과M (2) (0) | 2023.03.25 |
Comments