c05 - KimTaebin-ai/study_posts GitHub Wiki

์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ๊ณผ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

์ฒ˜์Œ ํ•ด๋‹น ์ฑ•ํ„ฐ์— ๋„๋‹ฌํ–ˆ์„ ๋•

์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋กœ์ง์ด ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค

1์ผ์ฐจ์—๋Š” ๊ทœ์น™์„ ์ฐพ๋Š”๋ฐ์— ๊ธ‰๊ธ‰ํ–ˆ๊ณ 

2~3์ผ์ฐจ๋Š” ๊ตฌํ˜„ํ•œ ๋ฌธ์ œ์—์„œ๋„ ๋‚ด ๊ทœ์น™์ด ์™œ ๋งž์„๊นŒ์— ๋Œ€ํ•ด ์งˆ๋ฌธํ–ˆ๋‹ค

๊ทธ ๋‹น์‹œ ๋‹ค๋ฅธ ๋™๋ฃŒ๋ถ„๋“ค์˜ ์กฐ์–ธ์„ ๊ทผ๊ฑฐ๋กœ, ๊ฒฐ๋ก ์€ ์ธ๊ฐ„์€ ์žฌ๊ท€์ ์ธ ์‚ฌ๊ณ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ทœ์น™์„ ์ฐพ์„ ๋• ์ˆ˜ํ•™์  ๊ท€๋‚ฉ๋ฒ•์„ ํ†ตํ•ด ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค

์ œ์ถœํ•˜๊ณ  ๋‚˜์„œ ์•Œ๊ฒŒ๋˜์—ˆ์ง€๋งŒ, ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ํŠน์ • ์กฐ๊ฑด์ด ๋๋‚˜๋Š” ์‹œ์ ์ธ ๊ธฐ์ €์กฐ๊ฑด์ด ์กด์žฌํ•œ๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ฝ์„ ๋• ๊ธฐ์ €์กฐ๊ฑด์„ ์ฐพ๊ณ  ๋์—์„œ ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์„ ์ฐพ์œผ๋ฉด ์ฆ๋ช…๊ณผ ๊ทœ์น™์ฐพ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

ex00

int	ft_iterative_factorial(int nb)
{
	int	result;
	int	i;

	i = 2;
	result = 1;
	if (nb < 0)
	{
		return (0);
	}
	else if (nb == 1)
	{
		return (1);
	}
	while (i <= nb)
	{
		result *= i++;
	}
	return (result);
}

ex01

int	ft_recursive_factorial(int nb)
{
	if (nb < 0)
	{
		return (0);
	}
	else if (nb < 2)
	{
		return (1);
	}
	return (nb * ft_recursive_factorial(nb - 1));
}

์žฌ๊ท€ํ•จ์ˆ˜์˜ ๊ธฐ์ € ์กฐ๊ฑด์„ ์•Œ์•„์•ผํ•จ

ํ•ด๋‹น ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ nb ๊ฐ€ 1์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์žฌ๊ท€๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ์•ผ ํ•จ

๊ทธ๋Ÿฌ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•จ

ex02

int	ft_iterative_power(int nb, int power)
{
	int	i;
	int	result;

	i = 1;
	result = nb;
	if (nb < 0)
	{
		return (0);
	}
	else if (nb == 0 && power == 0)
	{
		return (1);
	}
	else
	{
		while (i <= power)
		{
			result += nb;
			i++;
		}
	}
	return (result);
}

ex03

int	ft_recursive_power(int nb, int power)
{
	if (nb < 0)
	{
		return (0);
	}
	else if (power == 0)
	{
		return (1);
	}
	else if (nb == 0)
	{
		return (0);
	}
	return (nb * ft_recursive_power(nb, power - 1));
}

ex04

int	ft_fibonacci(int index)
{
	if (index < 0)
		return (-1);
	else if (index == 0)
		return (0);
	else if (index == 1)
		return (1);
	return (ft_fibonacci(index - 1) + ft_fibonacci(index - 2));
}

ex05

#include <stdio.h>

int ft_sqrt(int nb) 
{
    int i;
    int sqrt;

    i = 0;
    sqrt = 0;
    if (nb < 1)
        return 0;
    while (1) {
        sqrt = i * i;
        if (sqrt == nb)
            return i;
        else if (sqrt > nb)
            return 0;
        i++;
    }
}

ex06

#include <stdio.h>

int ft_is_prime(int nb) {
    // 2๋ถ€ํ„ฐ ์‹คํ–‰ ~ ์ž๊ธฐ ์ž์‹  - 1
    // nb % i == 0
    int i = 2;
    int is_prime = 1;
    if (nb <= 2) {
        return is_prime;
    } 
    while (i < nb) {
        if (nb % i == 0) {
            is_prime = 0;
        }
        i++;
    }
    return is_prime;
}

ex07

int	is_prime(int num)
{
	long	i;
	long	prime;

	i = 2;
	if (num <= 1)
		return (0);
	if (num == 2)
		return (1);
	while (1)
	{
		if (num % i == 0)
			return (0);
		prime = i * i;
		if (prime > num)
			break ;
		i++;
	}
	return (1);
}

int	ft_find_next_prime(int nb)
{
	int	num;

	num = nb;
	while (1)
	{
		if (is_prime(num))
			return (num);
		num++;
	}
}

ex08

#include <unistd.h>

void	print_arr(int *arr)
{
	int		i;
	char	c;

	i = 0;
	while (i < 10)
	{
		c = arr[i] + '0';
		write(1, &c, 1);
		i++;
	}
	write(1, "\n", 1);
}

int	check(int col, int *arr)
{
	int	i;

	i = 0;
	while (i < col)
	{
		if (arr[i] == arr[col])
			return (0);
		if (arr[i] - arr[col] == i - col)
			return (0);
		if (arr[i] - arr[col] == col - i)
			return (0);
		i++;
	}
	return (1);
}

int	check_queen(int col, int *arr)
{
	int	i;
	int	count;

	i = 0;
	count = 0;
	if (col == 10)
	{
		print_arr(arr);
		return (1);
	}
	while (i < 10)
	{
		arr[col] = i;
		if (check(col, arr))
			count += check_queen(col + 1, arr);
		i++;
	}
	return (count);
}

int	ft_ten_queens_puzzle(void)
{
	int	arr[10];
	int	i;
	int	result;

	i = 0;
	result = 0;
	while (i < 10)
		arr[i++] = 0;
	i = 0;
	while (i < 10)
	{
		result += check_queen(1, arr);
		arr[0]++;
		i++;
	}
	return (result);
}

์œ ๋ช…ํ•œ n-queens๋ฌธ์ œ์ด๋‹ค ์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ฃผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ๋งŒํผ ์ด ๋ฌธ์ œ๋ฅผ ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ’€๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ํ€ธ์˜ ํŠน์„ฑ (๋Œ€๊ฐ์„ , ํ–‰, ์—ด ์ด๋™๊ฐ€๋Šฅ)์„ ๊ณ ๋ คํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  1. ํ•˜๋‚˜์˜ ์—ด, ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ํ–‰์—๋Š” ํ•˜๋‚˜์˜ ํ€ธ๋งŒ ์œ„์น˜ํ•˜๊ฒŒ.
  2. ๋Œ€๊ฐ์„ ์˜ ์œ„์น˜ํ•˜๋Š”์ง€ ์•ˆํ•˜๋Š”์ง€ ์ง€์†์ ์ธ ํ™•์ธ (์ขŒํ–ฅ, ์šฐํ–ฅ ๋‘˜๋‹ค ํ™•์ธ)

๋” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ํ€ธ ํ•˜๋‚˜์˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ํŒŒ์ƒ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋ฌธ์ œ ์˜ˆ์‹œ์— ์ ํ˜€์žˆ๋Š” ์ˆซ์ž๋ถ€ํ„ฐ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ๊ฐ์ˆซ์ž์˜ ์ž๋ฆฟ๊ฐ’์ด x์˜ ์ขŒํ‘œ๊ณ  ์“ฐ์—ฌ์žˆ๋Š” ๊ฐ’๋“ค์ด y๊ฐ’์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 0123๋ผ๋Š” ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์ˆœ์„œ๋Œ€๋กœ 0,0 1,1 2,2 3,3์ด๋‹ค 4321์ด๋ฉด 0,4 1,3 2,2 3,1์ด๋‹ค ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 724๊ฐ€์ง€ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ์ € ์ฒซ๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’์ด ์ •ํ•ด์ง„๋‹ค๋ฉด ๋‘๋ฒˆ์งธ ํ–‰์˜ ๊ฐ’์„ ์ •ํ•˜๊ณ  ๊ทธ๋‹ค์Œ ํ–‰ ๊ทธ๋‹ค์Œ ๊ฐ’ ์•ˆ๋˜๋ฉด ๋ฆฌํ„ด ๋ฆฌํ„ด ๋ฆฌํ„ด ๋ฐ˜๋ณต์ด๋‹ค

โš ๏ธ **GitHub.com Fallback** โš ๏ธ