PS/Baekjoon Online Judge

[백준 15664] N과 M (10) [C]

kimyoungrok 2021. 8. 18. 00:41

백준 - 15664


풀이

"백준 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);
}

출처 및 참고자료

 

15664번: N과 M (10)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

[백준 15663] N과 M (9) [C]

풀이 기존에 풀이하던 방식은 단순히 중복을 허용하거나 하지 않는 방식이라 이번 문제를 풀이하기에는 적합하지 않다. 때문에, 기존에 i번째 요소를 사용했는지, 기존에 사용한 숫자와 현재 사

kyr-db.tistory.com

'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