๐ [๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ ํ์ด] Q.6603 ๋ก๋ ๋ฌธ์ ํ์ด - java
๐ ๋ฌธ์
https://www.acmicpc.net/problem/6603
๋ ์ผ ๋ก๋๋ {1, 2, โฆ, 49}์์ ์ 6๊ฐ๋ฅผ ๊ณ ๋ฅธ๋ค.
๋ก๋ ๋ฒํธ๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ์ ๋ช ํ ์ ๋ต์ 49๊ฐ์ง ์ ์ค k(k>6)๊ฐ์ ์๋ฅผ ๊ณจ๋ผ ์งํฉ S๋ฅผ
๋ง๋ ๋ค์ ๊ทธ ์๋ง ๊ฐ์ง๊ณ ๋ฒํธ๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, k=8, S={1,2,3,5,8,13,21,34}์ธ ๊ฒฝ์ฐ ์ด ์งํฉ S์์ ์๋ฅผ ๊ณ ๋ฅผ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ด 28๊ฐ์ง์ด๋ค.
([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], โฆ, [3,5,8,13,21,34])
์งํฉ S์ k๊ฐ ์ฃผ์ด์ก์ ๋, ์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ ์ ๊ทผ๋ฒ
Q.6603 ๋ก๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ์ ์กฐ๊ฑด๋๋ก ์ฃผ์ด์ง ์ซ์๋ค ์ค์ 6๊ฐ ์ซ์๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ ์ ๋๋ค.
์ซ์์ ์์๊ฐ ๋ฌ๋ผ๋ ๋๊ฐ์ผ๋ฏ๋ก
์์์ ์๊ด์์ด ์ฃผ์ด์ง n๊ฐ์ค 6๊ฐ๋ฅผ ๊ณ ๋ฅด๋
nC6 -> ์กฐํฉ ๋ฌธ์ ์ ๋๋ค.
๋ฐฑํธ๋ํน์ ํตํด n๊ฐ์ค 6๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๊ฒฝ์ฐ๋ค์
๊ตฌํ ์ ์์ต๋๋ค.
๐ป ์ฝ๋
package problem.backtracking;
import java.util.Scanner;
public class Main_6603 {
static boolean[] visited;
static final int MAX = 6;
static StringBuilder sb;
static int lotto[];
static int n;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sb = new StringBuilder();
while (true) {
n = sc.nextInt();
if (n == 0)
break;
lotto = new int[n];
visited = new boolean[n];
for (int i = 0; i < n; i++) {
lotto[i] = sc.nextInt();
}
dfs(0,0);
sb.append("\n");
}
System.out.print(sb.toString());
}
public static void dfs(int depth,int index){
if(MAX == depth){
print();
return;
}
for(int i=index; i<n; i++){
if(!visited[i]){
visited[i] = true;
dfs(depth+1,i);
visited[i] = false;
}
}
}
public static void print(){
for(int i=0; i<n; i++ ){
if(visited[i]){
sb.append(lotto[i]+" ");
}
}
sb.append("\n");
}
}