문제
https://www.acmicpc.net/problem/6603
풀이
완전탐색 문제로 재귀 함수를 사용하여 가능한 조합을 구한다.
k개 수에서 순서 상관 없이, 중복 없이 6개의 수를 뽑는다.
소스코드
package bruteforce;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ6603 {
static int k;
static int[] arr, result;
static boolean[] used;
static BufferedWriter bw;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
while(true){
StringTokenizer st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
if(k == 0) break;
arr = new int[k];
result = new int[6];
used = new boolean[k];
for(int i = 0; i < k ; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
recur(0, 0, result);
bw.flush();
bw.write("\n");
}
}
public static void recur(int idx, int cnt, int[] result) throws Exception {
if(cnt == 6){
Arrays.sort(result);
StringBuilder sb = new StringBuilder();
for(int num : result){
sb.append(num + " ");
}
bw.write(sb.toString());
bw.write("\n");
return;
}
for(int i = idx; i < k; i++){
if(used[i]) continue;
used[i] = true;
result[cnt] = arr[i];
recur(i+1, cnt+1, result);
used[i] = false;
}
}
}
'💡Problem Solving > BOJ' 카테고리의 다른 글
[BOJ 10159] 저울 (Java) (0) | 2022.01.01 |
---|---|
[BOJ 11779] 최소비용 구하기 2 (Java) (0) | 2021.12.30 |
[BOJ 1261] 알고스팟 (Java) (0) | 2021.12.27 |
[BOJ 2583] 영역 구하기 (Java) (0) | 2021.12.25 |
[BOJ 1074] Z (Java) (0) | 2021.12.24 |