방명록
- C# #6 알고리즘 기초2023년 08월 17일 21시 09분 32초에 업로드 된 글입니다.작성자: noun06
오늘은 프로그래머스 알고리즘 문제와 3주차 과제를 진행하려고 계획했다. 하지만 기본적인 기초 개념들이 잘 잡히지 않아서 많은 시간을 고민에 투자하여도 막히는 부분이 다수 있었다. 그래서 배운 내용을 토대로 기본 문법만을 사용하여 구현할 수 있는 정말 기초적인 알고리즘을 스스로 짜보았다.
합계(SUM)
//Input int[] scores = { 100, 75, 50, 37, 90, 95 }; int sum = 0; //Process: SUM for(int i = 0; scores.Length; i++} { if( scores[i] > 80) { sum += scores[i] } } //Output Console.WriteLine($"{scores.Length}명의 점수 중 80점 이상의 총합: {sum}");
개수(COUNT)
//Input int[] nums = { 1, 2, 3, 4, 5, 6 }; int count = 0; //개수를 저장할 변수는 0으로 초기화 //Process: COUNT for(int i = 0; nums.Length; i++} { if(nums[i] % 3 == 0) { count++; } } //Output Console.WriteLine($"1부터 6까지의 정수 중 3의 배수의 개수: {count}");
평균(AVERAGE)
- 평균은 합계 / 개수 이므로 위의 두 로직을 섞어서 만들 수 있다.
//Input int[] scores = { 90, 65, 78, 50, 95 }; int sum = 0; int count = 0; //Process: AVERAGE for(int i = 0; i < scores.Length; i++) { if(scores[i] >= 80 && scores[i] <= 95) { sum += scores[i] count++; } } double average = sum / (double)count; //Output Console.WriteLine($"{scores.Length}명의 점수 중 80 이상 95 이하인 점수의 평균: {avg}");
최댓값(MAX)
- 최댓값은 데이터의 값과 비교하였을 때 더 큰 값으로 할당된다.
//Input int[] nums = { -1, -2, -3, -4, -5 }; int max = int.MinValue; //정수형 데이터 중 가장 작은 값으로 초기화 //Process: MAX for(int i = 0; i < nums.Length; i++) { if(nums[i] > max) { nums[i] = max; } } //Output Console.WriteLine($"최댓값은: {max}");
최솟값(MIN)
- 최솟값은 데이터의 값과 비교하였을 때 더 작은 값으로 할당된다.
//Input int[] nums = { -1, -2, -3, -4, -5 }; int min = int.MaxValue; //Process: MIN for(int i = 0; i < nums.Length; i++) { if(nums[i] < min) { min = nums[i]; } } //Output Console.WriteLine($"최솟값은: {min}");
근삿값(NEAR)
- 하나의 타겟 값과 데이터 내 여러 값들 사이의 차의 절댓값을 구한 후 그 절댓값이 가장 작은 값이 타겟 값의 근삿값.
- 최솟값은 절댓값과 비교하였을 때 더 작은 값으로 할당되고 근삿값은 할당되었을 때의 데이터 값이다.
int Abs(int num) //절댓값 구하기 로컬 함수 { if (num < 0) return -num; else return num; } //Input int min = int.MaxValue; //최솟값 int[] nums = { 10, 20, 30, 40, 50 }; int target = 31; int near = 0; //Process: NEAR for(int i = 0; i < nums.Length; i++) { int abs = Abs(target - int[i]); if(abs < min) { min = abs; near = int[i]; } } //Output Console.WriteLine($"{target}과 가장 가까운 값은: {near}(차이: {min})");
순위(RANK)
- 순위들을 나타내는 배열을 따로 만들었고 이 순위 배열을 매 루프마다 1로 초기화한 후에 현재 점수 데이터와 나머지 점수 데이터를 비교하고 그에 따라 순위 배열의 데이터를 증가시킨다.
//Input int[] scores = { 90, 85, 99, 95, 40 }; int[] rankings = {1, 1, 1, 1, 1}; //모두 1로 초기화 //Process: RANK for(int i = 0; i < scores.Length; i++) { rankings[i] = 1; for(int j = 0; j < scores.Length; j++) { if(scores[i] < scores[j]) { rankings[i]++; } } } //Output for (int i = 0; i < rankings.Length; i++) { Console.WriteLine($"{scores[i]}점: {rankings[i]}등"); }
정렬(SORT)
검색(SEARCH)
병합(MERGE)
최빈값(MODE)
그룹(GROUP)
위 항목들을 계속해서 추가할 예정이고, 이 친구들을 접해보아야 알고리즘 문제풀기를 쉽게 할 수 있지 않을까 생각한다.
또한, 공부법 관련 특강에서 많은 것을 배웠는데 그 중 가장 기억나는 것은 배운 것은 직접 구현해보기, 모든 코드에 대한 의도와 근거를 가지기 그리고 활발한 소통하기이다.
'C#' 카테고리의 다른 글
C# #8 TextRPG 1 (0) 2023.08.18 C# #7 스네이크 게임 (1) 2023.08.18 C# #5 클래스, 객체, 상속, 다형성 (0) 2023.08.16 C# #4 메서드와 구조체 (0) 2023.08.15 C# #3 배열과 컬렉션 (0) 2023.08.15 다음글이 없습니다.이전글이 없습니다.댓글