과제 진행 중 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변수의 포인트를 전달하여 값을 변경하였다.
새로운 접근을 해야하는 문제여서 처음엔 어려웠지만 해결하고나니 뿌듯하다.