본문 바로가기
Development/Baekjoon

[C#] 1546번: 평균

by Mobics 2025. 8. 4.

 

목차


    백준 단계별로 풀어보기

    25.08.03

    4단계: 1차원 배열


    1546번: 평균

    문제 링크 : https://www.acmicpc.net/problem/1546

     

    문제를 풀기 위해 알아야 할 개념

    - 백준에서 자주 보이는 절대오차 / 상대오차의 개념

    1. 절대오차

    : 절대오차가 x 이하면 정답 처리한다는 말은 실제 정답이 a라고 하고 내가 출력한 정답이 b라고 할 때, abs(b - a)의 값이 x이면 정답이라는 의미

    ex) 절대오차 10^(-2) / 실제 정답 : 66.666667 / 내가 출력한 정답 : 66.6 --> 실제 답과의 절대오차는 0.066667 이 되기 때문에 절대오차가 '6 * 10^(-2)' 이상 차이나므로 틀린 것

    2. 상대오차

    : 절대오차를 실제 정답으로 나눈 값으로, 100을 곱해 백분율로 바꾸면 상대오차가 된다.

    ex) 상대오차 10^(-1)까지 허용한다는 것은 10^(-1)에 100을 곱한 10%의 오차까지 허용한다는 말이다. 즉, 상대오차 10^(-2)는 1%의 오차까지 허용한다는 의미다.

     

    ※ float은 소수점 유효자리가 6자리까지, double은 소수점 유효자리가 15자리까지 표현된다. 따라서 10^(-2) 정도의 오차는 float으로 표현해도 상관없다.

    ※ 참고한 블로그

     

    [PS][백준/1008] 절대오차와 상대오차

    문제 1008번: A/B두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.www.acmicpc.net 절대오차와 상대오차이 문제에서 "실제 정답과 출력값의 절대오차 또는 상대오차가 10⁻⁹ 이

    all-i-want.tistory.com

     

    - String.Format 사용법

    1. 표준 숫자 형식 문자열 중, 고정 소수점 형식 지정자 (F 또는 f)

    : 소수점 이하 자릿수를 지정하여 숫자를 고정 소수점 형식으로 변환한다.

    • 지정한 자릿수에서 반올림하여 표현한다.
    • 지정한 자릿수보다 숫자의 자릿수가 더 적으면 남은 자릿수는 "0"으로 표현한다.
    double pi = 3.1415926535
    string result = String.Format("{0:F2}", pi);	// result는 "3.14"

     

     

    표준 숫자 형식 문자열 - .NET

    이 문서에서는 표준 숫자 형식 문자열을 사용하여 일반적인 숫자 형식을 .NET의 텍스트 표현으로 서식을 지정하는 방법을 알아봅니다.

    learn.microsoft.com

     

    2. 사용자 지정 숫자 형식 문자열 중, "0"(영 자리 표시자)와 "#"(숫자 자리 표시자)

    - "0" (영 자리 표시자)

    : 해당 위치에 숫자가 없으면 0을 표시한다.

    double value = 1.2;
    string result = String.Format("{0:0.00}", value);	// result는 "1.20"

     

    - "#" (숫자 자리 표시자)

    : 해당 위치에 숫자가 없으면 아무것도 표시하지 않는다.

    double value = 1234.5;
    string result = String.Format("{0:#.##}", value); // result는 "1234.5"
     

    사용자 지정 숫자 형식 문자열 - .NET

    .NET에서 사용자 지정 숫자 데이터 서식 문자열 만들어 숫자 데이터 서식을 지정하는 방법을 알아봅니다. 사용자 지정 숫자 서식 문자열에는 하나 이상의 사용자 지정 숫자 지정자가 있습니다.

    learn.microsoft.com

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            string count = Console.ReadLine();
            int n = int.Parse(count);
            float[] scores = new float[n];
            float max = 0f;
            float sum = 0f;
            string[] input = Console.ReadLine().Split(' ');
    
            for (int i = 0; i < n; i++)
            {
                scores[i] = float.Parse(input[i]);
                if (scores[i] > max)
                    max = scores[i];
            }
    
            for (int i = 0; i < n; i++)
            {
                sum += scores[i] / max * 100.0f;
            }
            float average = sum / n;
            Console.Write($"{average:0.0#####}");
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 2743번: 단어 길이 재기  (0) 2025.08.06
    [C#] 27866번: 문자와 문자열  (1) 2025.08.04
    [C#] 10811번: 바구니 뒤집기  (0) 2025.08.04
    [C#] 3052번: 나머지  (1) 2025.08.03
    [C#] 10951번: A+B - 4  (0) 2025.07.23