PS/Baekjoon Online Judge

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

kimyoungrok 2021. 8. 4. 10:17

백준 - 15649


풀이

  • 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 < depth; j++)
                if (arr[j] == i) break; // 'arr' contains 'i'.

            if (j == depth) arr[depth] = i; 
            else continue;
        }
  • 배열에 없는 수를 넣은 후에 배열의 요소가 M개이면 출력을, 아니면 탐색을 진행한다.
        if (depth + 1 == M){
            for (int idx = 0; idx < M; idx++)
                printf("%d ", arr[idx]);
            putchar(10);
        }else BT(depth + 1);
    }
}

소스코드

#include <stdio.h>
int arr[8], N, M;
void BT(int depth){
    for (int i = 1; i <= N; i++){	
        if (!depth) arr[0] = i;
        else{
            int j;
            for (j = 0; j < depth; j++)
                if (arr[j] == i) break;
				
            if (j == depth) arr[depth] = 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);
    BT(0);
}

출처 및 참고자료

 

15649번: N과 M (1)

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

www.acmicpc.net

 

[백준] 15649번 N과 M(1) / 파이썬(python)

# 문제 링크 www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야

jiwon-coding.tistory.com

 

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

[백준 2556] 별 찍기 - 14 [C]  (0) 2021.08.04
[백준 1550] 16진수 [C]  (0) 2021.08.04
[백준 2606] 바이러스 [C]  (0) 2021.08.04
[백준 2003] 수들의 합 2 [C]  (0) 2021.08.04
[백준 11441] 합 구하기 [C]  (0) 2021.08.03