PS/Baekjoon Online Judge

[백준 15654] N과 M (5) [C]

kimyoungrok 2021. 8. 10. 15:46
728x90

백준 - 15654


풀이

"백준 15649, N과 M (1)"을 참고해서 풀이했다.

기존에는 1부터 입력받은 N까지의 수들 중에서 수열을 생성해야 했다.

이번에는 N개의 수를 이용해 수열을 생성하면 된다.


소스코드

#include <stdio.h>
#include <stdlib.h>
int arr[8], N, M, num[8];
int compare(const void *a, const void *b){
    return *(int*)a - *(int*)b;
}
void BT(int depth){
    for (int i = 0; i < N; i++){
        if (!depth) arr[0] = num[i];
        else{
            int j;
            for (j = 0; j < depth; j++)
                if (arr[j] == num[i]) break;
				
            if (j == depth) arr[depth] = num[i];
            else continue;
        }	
		
        if (depth + 1 == M){
            for (int idx = 0; idx < M; idx++)
                printf("%d ", arr[idx]);
            putchar(10);
        }else BT(depth + 1);
    }
}
int main(){
    scanf("%d %d", &N, &M);
    for (int i = 0; i < N; i++)
        scanf("%d", &num[i]);
    qsort(num, N, sizeof(int), compare);
    BT(0);
}

출처 및 참고자료

 

15654번: N과 M (5)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

 

[백준 15649] N과 M (1) [C]

풀이 depth가 0일 때는 배열에 첫 수를 넣어주고, 아닐 때는 배열에 없는 수를 찾아서 넣어준다. void BT(int depth){ for (int i = 1; i <= N; i++){ if (!depth) arr[0] = i; else{ int j; for (j = 0; j < dep..

kyr-db.tistory.com

728x90

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 17626] Four Squares [C]  (0) 2021.08.11
[백준 15657] N과 M (8) [C]  (0) 2021.08.10
[백준 15652] N과 M (4) [C]  (0) 2021.08.10
[백준 1788] 피보나치 수의 확장 [C]  (0) 2021.08.10
[백준 5430] AC [C]  (1) 2021.08.09