본문 바로가기
코딩일기

[알고리즘] 백준 #1546 평균 - C#

by 심다린 2025. 5. 1.

https://www.acmicpc.net/problem/1546

 

 

이 문제는, 문제에 제시된 조건대로 새로운 점수를 각각 구한 후 그 새로운 점수들의 평균값을 내는 문제이다. 

 

다음은 나의 풀이이다.

using System;
using System.Linq;

namespace CodingTest.Baekjoon
{
    public class B_1546
    {
        public static void Main(String[] args)
        {
            int n = int.Parse(Console.ReadLine());
            string[] input = Console.ReadLine().Split(' ');
            float[] scores = Array.ConvertAll(input, float.Parse);

            float max = scores.Max();
            float sum = 0;
            for (int i = 0; i < n; i++)
            {
                scores[i] = scores[i] / max * 100;
                sum += scores[i];
            }
            
            Console.WriteLine(sum / n);

        }
    }
}

 

 

<알아둬야할 것>

 

1. Array.ConvertAll()

Array.ConvertAll<TInput, TOutput>는 C#에서 배열의 각 요소를 변환하여 새로운 배열을 반환하는 메서드이다.

 

예) 문자열 배열 -> 정수 배열로 변환

string[] input = { "1", "2", "3" };
int[] result = Array.ConvertAll(input, int.Parse);

 

예) 정수배열 -> 문자열 배열로 변환

string[] input = { "1", "2", "3" };
int[] result = Array.ConvertAll(input, int.Parse);

 

 

예) 사용자 정의 형식 간 변환

double[] input = { 1.1, 2.2, 3.3 };
int[] result = Array.ConvertAll(input, x => (int)x);  // double → int

 

이 메서드를 사용하여 간단하게 배열 전체를 형변환 할 수 있으니 꼭 기억하자. 

 

 

2. C# Linq 집계함수

using System.Linq를 명시해주면 LINQ 메서드를 사용할 수 있다. (Enumerable 메서드)

.Max()

.Min()

.Average()

.Sum()

Console.WriteLine(scores.Average());

즉, 내가 작성한 코드에서 출력문을 다음과 같이 바꿀 수 있으며, 결과는 동일하다