https://www.acmicpc.net/problem/15665
-옆에 쓴거는 실제 문제 이름이 아니고 내가 알아보기 쉽게 하기 위해서 부재처럼 달아둔 것이다. 이번에는 좀 괴랄해졌다.
비슷한 바리에이션으로 가는 것 같다. 12까지 순열 조합이 왔다갔다하면서 입력값을 주고 안주고의 차이를 보여주고 중복된 값을 허용할 것인지 중복된 입력을 허용할 것인지 물어본다.
이 문제에서는 (9) 중복 입력 값 순열에서 같은 수를 여러번 골라도 되는 순열이다. 그렇다고 해서
9 9
9 9 이런식으로 완전히 같은 값을 나오게 하면 안된다.
7 7 이런식으로 앞에 항목에 넣었던 값을 다시 가져도 된다는 말이다.
visit를 생략해보자.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static int n, m;
public static int[] a;
public static int[] arr;
public static boolean[] visit;
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
a = new int[n];
arr = new int[m];
visit = new boolean[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
dfs(0);
System.out.println(sb);
}
public static void dfs(int depth) {
if (depth == m) {
for (int val : arr) {
sb.append(val + " ");
}
sb.append('\n');
return;
}
int before = 0;
for (int i = 0; i < n; i++) {
// if (!visit[i]) {
if (before != a[i]) {
before = a[i];
// visit[i] = true;
arr[depth] = a[i];
dfs(depth + 1);
// visit[i] = false;
// }
}
}
}
}
답이 맞았다.
'코딩테스트 > JAVA' 카테고리의 다른 글
[백준 JAVA] 10972번: 다음 순열 (1) | 2024.07.22 |
---|---|
[백준 JAVA] 15666번: N과 M (12) - 중복 입력 값 중복 조합 (0) | 2024.07.19 |
[백준 JAVA] 15664번: N과 M (10) - 중복 입력 값 조합 (0) | 2024.07.19 |
[백준 JAVA] 15663번: N과 M (9) - 중복 입력 값 순열 (0) | 2024.07.19 |
[백준 JAVA] 15657번: N과 M (8) - 입력 값 중복 조합 (0) | 2024.07.19 |