[C] Ten queens puzzle

숭글·2022년 4월 26일
0

과제 진행 중 ten queens puzzle을 해결해야하는 문제를 만났다.

아래와 같은 코드를 통해 해결했다.


#include <unistd.h>

void	print_map(char *map)
{
	write(1, map, 10);
	write(1, "\n", 1);
}

int	check_map(char *map, int idx)
{
	int	idx2;

	idx2 = 0;
	while (idx2 < idx && idx)
	{
		if (map[idx2] == map[idx]
			|| map[idx2] + (idx - idx2) == map[idx]
			|| map[idx2] - (idx - idx2) == map[idx])
			return (0);
		idx2++;
	}
	return (1);
}

void	find_queens(char *map, int idx, char curr, int *count)
{
	if (curr <= '9')
	{
		map[idx] = curr;
		if (check_map(map, idx))
		{
			find_queens(map, idx + 1, '0', count);
			if (idx == 9)
			{
				print_map(map);
				(*count)++;
			}
		}
		find_queens(map, idx, curr + 1, count);
	}
}

int	ft_ten_queens_puzzle(void)
{
	char	map[11];
	int		count;

	count = 0;
	find_queens(map, 0, '0', &count);
	return (count);
}

가능한 경우의 수를 count 하기 위해 count변수의 포인트를 전달하여 값을 변경하였다.
새로운 접근을 해야하는 문제여서 처음엔 어려웠지만 해결하고나니 뿌듯하다.

profile
Hi!😁 I'm Soongle. Welcome to my Velog!!!

0개의 댓글