Solved.ac Class4
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만 사용하고 나머지는 다 파라미터로 넘겼다.
큰 차이는 없다.
성공
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")
}