Baekjoon 15650 (N과 M(2))

Baekjoon 15650 (N과 M(2))

Baekjoon 15650, 백준 15650 문제의 본인 풀이입니다!
문제는 아래의 링크에서 확인할 수 있습니다.
문제 보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdbool.h>

int N, M;
int arr[10];
bool check[10]; // 기본이 false(0)이다

// count가 뽑은 갯수, current가 시작점 (current 이상의 수들로만 수열이 구성되어야 함)
void pick(int count, int current) {
if(count==M) { // M개 숫자를 모두 뽑음
for(int i=0; i<M; i++)
printf("%d ", arr[i]); // 모두 출력
printf("\n");
return;
}

for(int i=current; i<=N; i++){
if(!check[i]){
check[i] = true;
arr[count] = i; // i번 숫자를 뽑음
pick(count+1,i+1); // pick 재귀호출, 다음 깊이(숫자)로 들어감
check[i] = false;
}
}
}

int main(){
scanf("%d %d",&N, &M);
pick(0,1);
return 0;
}

Backtracking의 기본적인 형태이다.
코드를 살짝 변형하면 N과 M 시리즈 1~4를 모두 해결할 수 있었다.

Author

Yeonsang Shin

Posted on

2020-03-20

Updated on

2022-12-19

Licensed under

Comments