김김김의 게임개발
  • 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
    댓글