- Today
- Total
Notice
Recent Posts
Recent Comments
Link
250x250
프로그래밍 농장
쉽게 배우는 C# 알고리즘 프로그래밍 Part.1 - 1 [ C# ] 본문
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 |