import java.util.Arrays;
import java.util.Scanner;
public class Prob2309 { // 제출시 Main으로 바꿔줘야함
static void permutation(int[] arr, int depth) {
if (depth == 0) {
// depth 0일때 arr는 7개
int sum = 0;
for (int height: arr) {
sum += height;
}
// 7개 다 더하고 100이면 해당 arr 출력하고 끝
if (sum == 100) {
Arrays.sort(arr); // 무작위로 골라서라고 해도 순서대로 하라고 했기에 정렬
for (int height: arr) {
System.out.println(height);
}
System.exit(0);
}
return;
}
// depth 2일 때
// for 문 돌면서 arr 1개씩 빼면서 뺀 arr(8개)로 다시 permutation
for (int i = 0; i < arr.length; i++) {
// 들어온 arr를 하나씩 slice해서 재귀 돌리기
int[] subArr1 = Arrays.copyOfRange(arr, 0, i);
int[] subArr2 = Arrays.copyOfRange(arr, i+1, arr.length);
int[] concate = new int[subArr1.length + subArr2.length];
System.arraycopy(subArr1, 0, concate, 0, subArr1.length);
System.arraycopy(subArr2, 0, concate, subArr1.length, subArr2.length);
permutation(concate, depth - 1);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] dwarfs = new int[9];
for (int i = 0; i < dwarfs.length; i++) {
dwarfs[i] = scanner.nextInt();
}
scanner.close();
permutation(dwarfs, 2);
}
}
JavaScript에 너무 익숙해져서 굳이 Array 건들여가면서 섣불리 permutation 재귀를 돌려버린것 같다..ㅋㅋㅋ Java로 Array.slice() 구현해보려고 아주 용을 썼다. ㅋㅋㅋㅋㅋ
다행히 들어오는 값이 크지 않아서 잘 해결한 것 같다.
permutation을 생각해내서 depth 개념만 좀 검색해보고 내 손으로 재귀로 구현해본 것은 좀 기쁘다.
Java로도 코테 익숙해져야지..
근데 짜고 보니 순열로 푼게 맞나 모르겠네.. 그냥 풀었다 암튼 간에
'온라인 저지 > BOJ' 카테고리의 다른 글
[BOJ/Java] 17478 재귀함수가 뭔가요? (0) | 2022.02.03 |
---|---|
[BOJ/Node.js] 1786 찾기 (0) | 2022.01.30 |
[BOJ/Python] 16926 배열 돌리기 1 (0) | 2022.01.19 |
[BOJ/Python] 15649 N과 M(1) (0) | 2021.10.15 |
[BOJ/Python] 2447 별 찍기 - 10, 11729 하노이 탑 이동 순서 (0) | 2021.10.03 |
댓글