Baekjoon - 15652

Tadap·2023년 11월 4일
0

Baekjoon

목록 보기
73/94

문제

Solved.ac Class4

1차시도

public class Main {
	private static StringBuilder sb;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		String[] split = br.readLine().split(" ");
		int size = Integer.parseInt(split[0]);
		int target = Integer.parseInt(split[1]);
		int[] isVisit = new int[size + 1];

		for (int i = 1; i < size + 1; i++) {
			isVisit[i]++;
			solve(isVisit, size, i, 1, target);
			isVisit[i]--;
		}

		System.out.println(sb);
	}

	private static void solve(int[] isVisit, int size, int start, int deep, int target) {
		if (deep == target) {
			print(isVisit, size);
			return;
		}

		for (int i = start; i < size + 1; i++) {
			isVisit[i]++;
			solve(isVisit, size, i, deep + 1, target);
			isVisit[i]--;
		}
	}

	private static void print(int[] isVisit, int size) {
		for (int i = 1; i < size + 1; i++) {
			for (int j = 0; j < isVisit[i]; j++) {
				sb.append(i).append(" ");
			}
		}
		sb.append("\n");
	}

}

저번에 푼 문제를 살짝 다르게 풀어봤다. 변수도 전역변수는 StringBuilder만 사용하고 나머지는 다 파라미터로 넘겼다.
큰 차이는 없다.

성공

ToKotlin

val sb: StringBuilder = StringBuilder()

fun main() {
    val split = readln().split(" ")
    val size = split[0].toInt()
    val target = split[1].toInt()
    val isVisit = IntArray(size + 1)

    for (i in 1..size) {
        isVisit[i]++
        solve(isVisit, size, i, 1, target)
        isVisit[i]--
    }
    print(sb)
}

fun solve(isVisit: IntArray, size: Int, start: Int, deep: Int, target: Int) {
    if (deep == target) {
        print(isVisit, size)
        return
    }

    for (i in start..size) {
        isVisit[i]++
        solve(isVisit, size, i, deep + 1, target)
        isVisit[i]--
    }

}

fun print(isVisit: IntArray, size: Int) {
    for (i in 1..size) {
        for (j in 0..<isVisit[i]) {
            sb.append(i).append(" ")
        }
    }
    sb.append("\n")
}

0개의 댓글