본문 바로가기
backjoon/DFS && BFS

백준 15649번 -N과M(1) c언어

by 정구지개발자 2023. 1. 11.
728x90

https://www.acmicpc.net/problem/15649

 

15649번: N과 M (1)

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

www.acmicpc.net

1.  1줄씩 출력해야 한다고 생각해서 배열을 사용하여 내용물을 저장했다가 출력하자는 생각함

2. 이떄 서로 중복 없이 숫자를 골라서 저장하고 출력해야 한다. 따라서 DFS전략을 이용해 재귀문을 사용한다.

3. flag 를 사용해서 중복되는 숫자를 판별해준다.

 

나의 답안)

#include <stdio.h>

void	DFS(int	*result, int count, int N, int M)
{
	int	i,j;
	int	flag;

	if (count == M)
	{
		i = 0;
		while (i < M)
		{
			printf("%d ", result[i]);
			i++;
		}
		printf("\n");
	}
	else
	{
		i = 1;
		while (i <= N)
		{
			flag = 0;
			j = 0;
			while (j < count)
			{
				if (result[j] == i)
					flag = 1;
				j++;
			}
			if (flag == 0)
			{
				result[count] = i;
				DFS(result, count + 1, N, M);
			}
			i++;
		}
	}
}

int	main()
{
	int	N,M;
	scanf("%d %d", &N, &M);

	int	result[M];
	DFS(result, 0, N, M);
	return (0);
}
728x90

'backjoon > DFS && BFS' 카테고리의 다른 글

백준 1697 java  (0) 2024.02.05
백준 15651 - N과M(3) c언어  (0) 2023.01.17
백준 15650 - N과M(2) c언어  (0) 2023.01.14

댓글