๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋ถ€์ŠคํŠธ์ฝ”์Šค CS50 ์ฝ”์นญ์Šคํ„ฐ๋”” 2๊ธฐ 4์ฃผ์ฐจ

์ด์€๋นˆ EUNBINยท2021๋…„ 2์›” 8์ผ
1
post-thumbnail

๋ถ€์ŠคํŠธ์ฝ”์Šค CS50 ์ฝ”์นญ์Šคํ„ฐ๋”” 4์ฃผ์ฐจ ์ฃผ์ œ๋Š” '์•Œ๊ณ ๋ฆฌ์ฆ˜' !!

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ณ๋ณด๋ ค๊ณ  ๊ณต๋ถ€ํ–ˆ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ...
์ด๋ก ๋„ ๋ชจ๋ฅด๋ฉด์„œ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€๊ณ  ๋ชจ๋ฅด๋Š”๊ฑด ํ’€์ด ์ฐพ์•„๋ณด๋ฉด์„œ ์กฐ๊ธˆ์”ฉ ์ตํ˜”๋˜ ๊ฒƒ ๊ฐ™๋‹ค
๋ฌผ๋ก  ๊ธฐ์–ต์— ์ž˜ ๋‚จ๋Š”๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์—ˆ์ง€๋งŒ ๋‚œ์ด๋„๊ฐ€ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ๊ธฐ๋ณธ์ด ์—†๋‹ค๋Š”๊ฒŒ ํ‹ฐ๋‚  ์ˆ˜๋ฐ–์— ์—†์—ˆ๋‹ค

์ง€๊ธˆ์ด๋ผ๋„ ๊ธฐ์ดˆ๋ฅผ ์Œ“์•„๋ณด์ž ๐Ÿ”ฅ


๐Ÿ“Œ 4์ฃผ์ฐจ ์•Œ๊ณ ๋ฆฌ์ฆ˜

4์ฃผ์ฐจ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ‘œ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค

Big-O ํ‘œ๊ธฐ๋ฒ• : ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์˜ ์ƒํ•œ์„ 
ฮฉ(Omega, ์˜ค๋ฉ”๊ฐ€) ํ‘œ๊ธฐ๋ฒ• : ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์˜ ํ•˜ํ•œ์„ 
ฮ˜(Theta, ์Ž„ํƒ€) ํ‘œ๊ธฐ๋ฒ• : ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ƒํ•œ์„ ๊ณผ ํ•˜ํ•œ์„ ์ด ๊ฐ™์„ ๋•Œ

์„ ํ˜• ๊ฒ€์ƒ‰(linear search) : ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ด์ง„ ๊ฒ€์ƒ‰(binary search) : ์ค‘๊ฐ„ ๊ฐ’๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฒ„๋ธ” ์ •๋ ฌ(bubble sort) : ๋‘ ๊ฐœ์˜ ์ธ์ ‘ํ•œ ์ž๋ฃŒ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉด์„œ ์œ„์น˜๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹
์„ ํƒ ์ •๋ ฌ(selection sort) : ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ€์žฅ ์ž‘์€(ํ˜น์€ ํฐ) ์ˆ˜๋ฅผ ์ฐพ์•„ ์ฒซ ๋ฒˆ์งธ(ํ˜น์€ ๋งˆ์ง€๋ง‰) ์œ„์น˜์˜ ์ˆ˜์™€ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹
์žฌ๊ท€(recursion) : ์ž๊ธฐ ์ž์‹ ์„ ์žฌ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹
๋ณ‘ํ•ฉ ์ •๋ ฌ(merge sort) : ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์„ ๋‘ ๊ฐœ์˜ ๊ท ๋“ฑํ•œ ํฌ๊ธฐ๋กœ ๋ถ„ํ•  ํ›„, ๋ถ„ํ• ๋œ ๋ถ€๋ถ„์˜ ์ž๋ฃŒ๊ฐ’์„ ์ •๋ ฌํ•œ ๋‹ค์Œ, ๋‘ ๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ํ•ฉํ•˜์—ฌ ์ „์ฒด๊ฐ€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹

์ •๋ ฌ์ด ๋˜์–ด๊ฐ€๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค˜์„œ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์— ๊ด€๋ จํ•ด์„œ๋Š” ์–ด๋Š ์ •๋„ ์™€๋‹ฟ์•˜์ง€๋งŒ
์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋น…์˜ค๋Š”? ํ•˜๋ฉด ๐Ÿ™„ ๊ธ์ ๊ธ์ 

์ด์ „์— ์‚ฌ๋‘” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ…์—์„œ๋„ ์ฝ๊ธด ํ–ˆ์ง€๋งŒ ๐Ÿ™„๐Ÿ™„
๋ฐ˜๋ณตํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์–ด์•ผ ๊ฒ ๋‹ค ..ใ…Žใ…Ž..

๊ฐ•์˜ ๋“ค์œผ๋ฉด ํ€ด์ฆˆ๋Š” ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹น ๐Ÿ˜Š
(ํ•ญ์ƒ ์—ฌ๊ธฐ๊นŒ์ง„ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค..)


๐Ÿ“Œ 4์ฃผ์ฐจ ํŒ€๋ฏธ์…˜

๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋‚œ์ด๋„๊ฐ€ ๋†’์•„์„œ ๊ฐ€์žฅ ์‰ฌ์›Œ๋ณด์ด๋Š” ๋ฌธ์ œ๋ฅผ ํƒํ–ˆ๋‹ค
(์ด๊ฑฐ๋ผ๋„ ์ž˜ ํ’€๋ฉด ๋‹คํ–‰์ด๋‹ค ์‹ถ์€ ์‹ฌ์ •์ด์—ˆ๋‹ค ๐Ÿ˜ญ)

#include <stdio.h>
#include <cs50.h>

int isAnagram(const int *n1, const int *n2);

int main(void)
{
    isAnagram(12345, 54321);    
    isAnagram(14258, 25431);    
    isAnagram(11132, 21131);    
}

//์ถœ๋ ฅ์„ ์œ„ํ•œ ํ•จ์ˆ˜
void check(const int *n1, const int *n2) 
{
    printf("์ž…๋ ฅ๊ฐ’: %i, %i โ†’ ", n1, n2);
    if(isAnagram(n1, n2)) //isAnagram์ด ์ฐธ์ด๋ฉด
    {
        printf("์ถœ๋ ฅ๊ฐ’: True\n");
    }
    else  //isAnagram์ด ๊ฑฐ์ง“์ด๋ฉด
    {
        printf("์ถœ๋ ฅ๊ฐ’: False]\n");
    }
}

//์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
int isAnagram(const int *n1, const int *n2)
{
    int i ,j;
    for(i = 0; n1[i]; i++) //n1[i] ๋ฌธ์ž๊ฐ€ ์ฐธ์ด๋ฉด ๋ฐ˜๋ณต
    {
        for(j = 0; n2[j]; j++) //n2[j] ๋ฌธ์ž๊ฐ€ ์ฐธ์ด๋ฉด ๋ฐ˜๋ณต
        {
            if(n1[i] == n2[j]) //n1[i]์™€ n2[j]๊ฐ€ ๊ฐ™์œผ๋ฉด
            {
                break;//n2[j] ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ(n2[j]์€ ์ฐธ์ธ ์ƒํƒœ)
            }           
        }
        if(n2[j]==0) //n1[i]์™€ n2[j]๊ฐ€ ๋‹ค๋ฅด๋ฉด
        {
           return 0; //isAnagram์€ ๊ฑฐ์ง“
       }
   }
   return 1; //isAnagram์€ ์ฐธ
}

์ฒ˜์Œ์— ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ถœ๋ ฅ! ํ–ˆ๋”๋‹ˆ ์ˆซ์ž๊ฐ€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ์„œ for๋ฌธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค
(์”์“ธ..ใ…Ž..)

#include <stdio.h>
#include <cs50.h>


const int FIRST_NUMBER_01[5] = {1, 2, 3, 4, 5};
const int FIRST_NUMBER_02[5] = {5, 4, 3, 2, 1};

int isAnagram(const int n1[5], const int n2[5]);


int main()
{
    isAnagram(&FIRST_NUMBER_01[5], &FIRST_NUMBER_02[5]);
}


//์ถœ๋ ฅ์„ ์œ„ํ•œ ํ•จ์ˆ˜
void check(const int n1[5], const int n2[5])
{
    for(int k = 0; k < 5; k++)
    {
        printf("์ž…๋ ฅ๊ฐ’: %d, %d โ†’ ", n1[k], n2[k]);
    }
    if(isAnagram(n1, n2)) //isAnagram์ด ์ฐธ์ด๋ฉด
    {
        printf("์ถœ๋ ฅ๊ฐ’: True\n");
    }
    else  //isAnagram์ด ๊ฑฐ์ง“์ด๋ฉด
    {
        printf("์ถœ๋ ฅ๊ฐ’: False]\n");
    }
}


//์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
int isAnagram(const int n1[5], const int n2[5])
{
    int i ,j;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            if(n1[i] == n2[j]) //n1[i]์™€ n2[j]๊ฐ€ ๊ฐ™์œผ๋ฉด
            {
                break; //n2[j] ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ(n2[j]์€ ์ฐธ์ธ ์ƒํƒœ)
            }
        }
        if(n2[j] == 0) //n2[j]๊ฐ€ ๊ฑฐ์ง“์ด๋ฉด
        {
           return 0; //isAnagram์€ ๊ฑฐ์ง“
       }
   }
   return 1; //isAnagram์€ ์ฐธ
}

์ด๊ฑด ์ปดํŒŒ์ผ๊นŒ์ง„ ๋˜๋Š”๋ฐ.. ์ถœ๋ ฅํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋‚˜์˜จ๋‹น ๐Ÿ™ƒ

ํŒ€์›๋ถ„๋“คํ•œํ…Œ ์—ฌ์ญค๋ดค๋Š”๋ฐ ์•„๋ฌด๋„ ์•Œ๋ ค์ฃผ์‹œ๋Š” ๋ถ„์ด ์—†์–ด์„œ
๋ผ์ด๋ธŒ ๊ฐ•์˜ ๋๋‚˜๊ณ  ๋‹ค๋ฅธ ํŒ€๋“ค์ด ํ‘ผ ํ’€์ด๋ฅผ ๋ด์•ผ๊ฒ ๋‹ค ๐Ÿ’ฆ


๐Ÿ“Œ 4์ฃผ์ฐจ ๋ผ์ด๋ธŒ ๊ฐ•์˜

๊ธˆ์š”์ผ ์ €๋…์— ์ผ์ด ์ƒ๊ฒจ ์ด๋ฒˆ์—๋Š” ํ† ์š”์ผ 3~10์‹œ์— ์˜ฌ๋ผ์˜ค๋Š” ๋ผ์ด๋ธŒ ๊ฐ•์˜ ๋…นํ™”๋ณธ์„ ๋ณด์•˜๋‹ค
์ด๋ฒˆ ์ฃผ๋ถ€ํ„ฐ๋Š” ์ƒˆ๋กœ์šด ์ง„ํ–‰์ž๋ถ„๊ณผ ์ƒˆ๋กœ์šด ์„ ์ƒ๋‹˜์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋‹ค

์ค‘๊ฐ„์— ์‚ฌ์‹ค ์‹ค๋ฌด์—์„œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ๊ฑฐ๋‚˜ ํ•  ์ผ์ด ์—†์ง€๋งŒ
์ฝ”๋“œ๋ฅผ ์งค ๋•Œ ์„ ํƒ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ง„๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…จ๋‹น

ํšŒ์‚ฌ์—์„œ ์‹ค๋ฌด๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์งœ๋ผ๊ณ  ์‹œํ‚ค๋ฉด ๊ทธ ํšŒ์‚ฌ ๋‚˜์˜ค๋ผ๊ณ  ํ•˜์…จ ... ๐Ÿ™„


๐Ÿ“Œ 4์ฃผ์ฐจ ํ›„๊ธฐ

ํŒ€์›๋“ค๊ณผ ์ด๋ž˜์ €๋ž˜ ์˜๋…ผํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ
๋‹ค๋“ค ๋ฐ”์˜์‹ ์ง€ ์†Œํ†ต์ด ์ž˜ ์•ˆ๋ผ์„œ ์•„์‰ฝ๋‹ค ๐Ÿ˜ญ๐Ÿ˜ญ

์ง„ํ–‰๋„ ์ž์œ ๋กœ์šด ํŽธ์ด๋‹ค ๋ณด๋‹ˆ ์Šฌ๋ ์Šฌ๋  ์ง„๋„๋งŒ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด ์–ด๋Š์ƒˆ ์ˆ˜๋ฃŒ์ฆ ๋ฐ›๊ณ  ์žˆ์„ ๊ฒƒ ๊ฐ™๊ธฐ๋‘...
์Šค์Šค๋กœ ๋” ์ฐพ์•„๋ณด๊ณ  ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ง์ฒ˜๋Ÿผ ์™œ ์ž˜ ์•ˆ๋˜๋‹ˆ ๐Ÿ˜ต
์˜ค๋Š˜๋„ ๋ฐ˜์„ฑ์œผ๋กœ ๋๋‚˜๋Š” ๋ถ€์ŠคํŠธ์ฝ”์Šค ํšŒ๊ณ ๋ก,,,,,

profile
Frontend Engineer & Value Creator

0๊ฐœ์˜ ๋Œ“๊ธ€