풀이
"백준 15663, N과 M (9)"를 참고해서 풀이했다.
요소의 중복은 temp와 check로 관리가 가능하니, 이전에 사용했던 요소의 인덱스를 탐색 시작점으로 이용하면 된다.
소스코드
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool check[8];
int N, M, arr[8], visited[8];
int compare(const void *a, const void *b){
return *(int*)a - *(int*)b;
}
void BT(int depth, int start){
for (int i = start, temp = 0; i < N; i++)
if (!check[i] && temp != arr[i]){
temp = visited[depth] = arr[i];
check[i] = true;
if (depth + 1 == M){
for (int idx = 0; idx < M; idx++)
printf("%d ", visited[idx]);
putchar(10);
}else BT(depth + 1, i);
check[i] = false;
}
}
int main(){
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
qsort(arr, N, sizeof(int), compare);
BT(0, 0);
}
출처 및 참고자료
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 15655] N과 M (6) [C] (0) | 2021.08.18 |
---|---|
[백준 15651] N과 M (3) [C] (0) | 2021.08.18 |
[백준 15663] N과 M (9) [C] (0) | 2021.08.17 |
[백준 7453] 합이 0인 네 정수 [C] (0) | 2021.08.16 |
[백준 1937] 욕심쟁이 판다 [C] (0) | 2021.08.16 |