public class Main {
static boolean[] check;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
while (true) {
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
if (num == 0)
break;
String[] arr = new String[num];
for (int i = 0; i < num; i++) {
arr[i] = st.nextToken();
}
check = new boolean[num];
combination(arr,0,0,"");
System.out.println();
}
}
static void combination(String[] arr,int depth,int start,String result) {
if (depth == 6)
System.out.println(result);
for (int i = start; i < arr.length; i++) {
if (!check[i]) {
check[i] =true;
combination(arr,depth+1,i+1,result + arr[i]+" ");
check[i]=false;
}
}
}
}
🧐백트랙킹을 이용하여 푼 문제입니다.
여기서 combination 함수 안 for문의 시작 부분을 어떻게 정의 하냐에 따라 풀이 방법이 달라지는데 여기서는 check배열을 통해 이미 사용한 수를 사용하지 못하도록 하였습니다. start인수는 숫자를 오름차순으로 정렬하기 위해 시작 위치를 조절하기 위해 사용하였습니다.
출처 : 백준 - 로또