프로그래밍 농장

쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ] 본문

C#

쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ]

Tennessee201 2022. 7. 13.
728x90

- Sum Algorithm (합계 알고리즘)

Sym Algorithm은 말 그대로 더하는 알고리즘이다. 아래의 정수형 6칸 배열 scores[] 의 값중, 80이상만 더하라 하였을때, 아래와 같이 구현할수있다. 

static void Main()
        {

        //[1] Input
        int[] scores = { 100, 75, 50, 37, 90, 95 };

        int sum = 0;
       
      
        //[2] Process  : 알고리즘 영역 
 		 foreach (int a in scores)
        	{
          	  if(a >= 80)
          	  	{
             	   sum += a;
           	 	}
      	  }

        //[3] Output
        Console.WriteLine($"{scores.Length} 명의 점수 중 80점 이상의 총점 : "+ sum );

        }

위와 같이 알고리즘 동작 코드에서는 기본적으로 [1] Input -> [2] Process (알고리즘 영역) -> [3] Output 으로 구성된다.

 

또한 아래와 같이 Expression(표현식)으로도 구현이 가능하다. 

(new int[] {100,75,50,37,90,95}).Where(s => s >= 80).Sum()  //Statement -> Expression

 


- Arithmetic Sequence (등차수열)

: 연속하는 두 수의 차이가 일정한 수열 

ex) 1~20 까지의 정수 중 홀수의 합을 구하는 프로그램 작성 

using System;
// 등차수열(Arithmetic Sequence) : 얀속하는 두 수의 차이가 일정한 수열 
    class Program
    {

    //1~20 정수 중 홀수의 합을 구하는 프로그램
        static void Main()
        {
        // [1] Input
        var sum = 0;

        // [2] Process
        for(int i =0; i <=20; i++)
        {
            if (i % 2 == 1) // 필터링(홀수)
            {
               sum += i; 
            }
        }

        // [3] Output 

        Console.WriteLine($"\n1부터 20까지 홀수의 합 : {sum}");
        
        }
    }

 


- Count Algorithm (개수 알고리즘)

아래와 같이 개수 알고리즘의 합 계산식을 단순화하여 구현할수있다. 

using System;
using System.Linq;

// count Algorithm : 개수 알고리즘 
    class Program
    {
        // 1부터 1000까지의 정수 중 13 배수의 개수 
        static void Main()
        {

        // [1] Input
        

        // 1~1000 까지 배열 선언 
        var numbers = Enumerable.Range(1,1_000).ToArray();

        // 개수를 저장할 변수 a 를 0으로 초기화 
        int count = default;

        // Linq와 같은 확장프로그램 Method chain 형식의 구현방식 : 람다'식' 
        // 자잘한 에러예방방식 .
        // Enumerable.Range(1, 1000).ToArray().Where(n => n % 13 == 0).Count();


        // [2] Process : 개수 알고리즘 영역 : 주어진 범위에 주어진 조건(필터링)
        for (int i= 0; i < numbers.Length; i++)
        {
            if(numbers[i] % 13 == 0)
            {
                count++;
            }
        }

        // [3] Output
        Console.WriteLine($"1부터 1,000까지의 정수 중 13의 배수의 개수는 {count} 이다.") ;
        }
    }

 

 


- (Prime number) 소수 여부 판별하기

-> 소수로 나누어떨어질때까지 while 반복하도록 구현  

using System;
using System.Linq;

// 특정 수를 입력 받아서, 소수여부를 판별하는 프로그램

// 소수(Prime Number) : 자연수 중 1과 자기 자신만을 약수로 가지는 수
    class Program
    {
    static void Main()
    {
        // [1] Input
        var number = 0;
        Console.WriteLine("수 입력: _\b");
        number = Convert.ToInt32(Console.ReadLine());

        // [2] Process : Prime Number : 2부터 n까지 나누어 떨어지는 수가 발생하때까지 반복
        var i = 1;
        do
        {
            i = i + 1; // 2부터 n까지 비교


            Console.WriteLine($"{number} % {i} = {number % i}");

        } while (number % i != 0); // 소수는 number로만 나누어 떨어짐 


        // [3] Output

        if(number == i)
        {
            Console.WriteLine("소수!");
        }
        else
        {
            Console.WriteLine("소수가 아님!");
        }
    }
    }

 


- 알고리즘 완전수 (: 자신을 제외한 약수의 합이 자신과 같은 수)

using System;

// 알고리즘 완전수(PerfectNumber) : 자신을 제외한 약수의 합이 자신과 같은 수
// 6 = 1 + 2 + 3

// -> 1~10000 사이의 완전수와 개수를 출력
    class Program
    {
    static void Main()
    {
        int sum = 9; // 약수의 합계
        int cnt = 0; // 완전수의 개수
        int max = 0; // 가장 큰 약수 
        int rem = 0; // 나머지값 임시 보관
                     // 
        for (int i = 1; i < 10000; i++)
        {
            sum = 0;  // 매 반복마다 0으로 초기화 
            max = i / 2;  // 모든 짝수를 2로 나누면 가장 큰 약수를 구할 수 있다 !
            for (int j = 1; j <= max ; j++)
            {
                rem = i % j;
                if(i % j == 0)
                {
                    sum += j; //약수의 합계
                }
            }
            if(i == sum)
            {
                System.Console.WriteLine("완전수 : {0}",i);
                cnt++;
            }
        }

        System.Console.WriteLine("완전수 개수: {0}", cnt);
    }
    
    }

 


- 평균 알고리즘 Average algorithm ( 합계(sum) + 개수(count) 알고리즘 병합 )

using System;
using System.Linq;
// n명의 점수 중에서 80점이상 95점 이하인 점수의 평균
// [1] 입력 : n명의 성정 

    class Program
    {
    static void Main()
    {
        int[] data = { 90, 65, 78, 50, 95 };
        int sum = 0; //합계를 담을 변수 (그릇)
        int count = 0; //개수를 담을 변수 (그릇)

        // [2] 처리 : AVG = SUM / COUNT
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] >= 80 && data[i] <=95 )
            {
                sum += data[i]; // SUM
                count++; // COUNT
            }
        }
        double avg = sum / (double)count; // AVG

        // [3] 출력
        Console.WriteLine($"80점 이상 95점 이하인 자료의 평균 : {avg}"); // 92.5

        // Linq 기능을 사용해서 구현 (현업 업무용. . )
        // data.Where(d => d >= 80 && d <= 95).Average();


    }
    
    }

 

 

728x90

'C#' 카테고리의 다른 글

쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ]  (0) 2022.07.13
액션 / 람수표현식 함수 [ Unity ]  (0) 2022.07.13
C# 프로그래밍_1  (0) 2022.07.04