본문 바로가기
온라인 저지/BOJ

[BOJ/Java] 2309 일곱 난쟁이

by ahj 2022. 1. 23.
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로도 코테 익숙해져야지..

근데 짜고 보니 순열로 푼게 맞나 모르겠네.. 그냥 풀었다 암튼 간에

댓글