ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS50 코칭스터디] CS50 코칭스터디2기_4주차
    CS50 코칭스터디2기 2021. 2. 8. 00:30

    4주차_알고리즘

     

    알고리즘 알고리즘이란 입력값을 출력 값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열입니다. 이러한 일련의 순서적 규칙들의 나열 방법에 따라 알고리즘의 종류가 달라집니다. 같은 출력 값이라도 알고리즘적 순서 나열에 따라 출력 값에 도달하는 시간은 서로 다를 수 있습니다.

     

     

    알고리즘에서 가장 중요한 건 정확성과 효율성입니다.

    정확성은 내가 구현한 알고리즘이 정답을 찾았는지입니다.

    효율성은 작업을 완료하기까지 얼마나 시간과 노력을 덜 들일 수 있는지에 대한 척도입니다.

     

     

     

    미션 : 숫자 애너그램 찾기

    4주 차 팀미션은 알고리즘의 정확성과 효율성을 생각해보면서 코드를 구현해보았습니다. 

    #include <stdio.h>
    #include <cs50.h>
    int main(void) 
    {  
      int a[5] = {1, 2, 3, 4, 5}; int b[5] = {5, 4, 3, 2, 1}; // 배열을 프로그램 내에서 선언하여 입력받음
      int temp; 
      for (int i = 0; i < 5; i++) //a 배열을 버블정렬
      {
        for (int j = 0; j < 5 - i - 1; j++ )
        {
          if (a[j] > a[j+1])
          {
            temp = a[j];
            a[j] = a[j+1];
            a[j+1] = temp;
          }
        }
      }
       for (int i = 0; i < 5; i++) //b 배열을 버블정렬
      {
        for (int j = 0; j < 5 - i - 1; j++ )
        {
          if (b[j] > b[j+1])
          {
            temp = b[j];
            b[j] = b[j+1];
            b[j+1] = temp;
          }
        }
      }
      //a와 b가 애너그램이라면 정렬된 배열의 순서에 따른 숫자가 모두 같을 것이므로, 숫자가 같은지 검사할 것
      int flag = 0; //정렬된 두 배열이 같은지 다른지를 표시해주는 지표인 flag 변수를 사용
      for (int i = 0; i < 5; i++) 
      {
          if (a[i] != b[i])
          {
              flag = 1; // 반복루프를 돌다가 특정 위치에서 두 배열의 숫자가 같지 않다면 flag의 값을 1로 바꿈
              break; // 더이상 반복문을 돌 필요가 없으므로 반복문 탈출
          }
      }
      if (flag == 1) // flag가 1로 변했다면 두 배열이 같지 않은 것이므로 애너그램이 아님. 따라서 False 출력
        printf("False\n");
      else // flag가 그대로 0의 초기값을 지니고 있다면 두 배열은 애너그램
        printf("True\n");
      return 0;
    }

    코드를 구현하면서 아쉬웠던 점은 함수화 모듈화를 해서 구현을 진행하지 못한 점이 아쉽습니다.

    다음 미션에는 아쉬움이 남지 않도록 열심히 해야겠네요!

Designed by Tistory.