[C언어] 백준 15650 : N과 M (2)
https://velog.io/@seochan99/15650-N%EA%B3%BC-M-2 이번에도 이 사람 도움을받았다.. 이 4가지 유형을 알아두고 그때그때 계속 꺼내서보자.
재귀문제를 좀 찾아서 풀어봐야겠다.
풀이
#include <stdio.h>
int n, m;
int result[1000];
int check[1000];
void DFS(int depth, int cut)
{
int i;
if (depth == m)
{
for (int i = 0; i < m; i++)
printf("%d ", result[i]);
printf("\n");
}
else
{
for (i = 1; i <= n; i++)
{
if (check[i] == 0 && cut < i)
{
result[depth] = i;
check[i] = 1;
DFS(depth + 1, i);
check[i] = 0;
}
}
}
}
int main(void)
{
scanf("%d %d", &n, &m);
DFS(0, 0);
return 0;
}
15649 문제는 중복되는 수까지 출력해주게 했는데 이는 DFS가 도는데 두번째 for문에서 i가 항상 1부터 시작하기 때문이다 !
왜냐하면 i =2일때 DFS(1)을 시작하면 (2,1)도 출력하게 되면 앞서 출력된 (1,2)와 겹치게 되는데 이때 cut이라는 변수를 넣어서 i가 1보다 클때 실행되게 만들면 되는것이다..!
거기에 check를 제외한 수도 출력하면된다..! 그럼 끗 ..!
Author And Source
이 문제에 관하여([C언어] 백준 15650 : N과 M (2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmainsain/C언어-백준-15650-N과-M-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)