본문 바로가기
C#/C# : Baekjoon

[백준] C# : 평균 (1546번)

by TODAYCODE 2021. 7. 29.
반응형

백준 단계별로 풀어보기 5단계 1차원배열 5번문제

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

문제의 핵심

1. 배열에서 최고점 찾아내기

2. 값을 바꾸고 원하는 서식으로 출력하기


 

 

이번 문제를 풀이하면서 이전에는 사용하지 않았던 2가지를 설명하고자 한다.

첫번째로는 한번에 형식변환을 하는 방법이다.

사용자로부터 입력을 배열로 받으면, 하나하나 변환하기가 너무 번거롭다.

이때 배열의 모든 요소를 한번에 형식변환하는 방법을 소개한다.

 

string[] s = Console.ReadLine().Split();
float[] score = Array.ConvertAll(s, float.Parse);

 

입력값을 공백을 기준으로 잘라서 string 배열에 담은 경우,

Array.ConvertAll( 변환할 배열, 변환할 형식 )

을 사용해주면 배열의 모든 원소가 한번에 지정한 형식으로 변환된다.

알아두면 매우 유용하므로 꼭 기억하도록 하자.

 

 

두번째로는 스트링포멧이다.

소수점을 표현해야할 때 강제로 원하는 소수점까지 표현하는 방식이 존재한다.

원하는 숫자바로 뒤에 :0.00 혹은 :#.## 이런식으로 표현이 가능하다.

 

여기서 주의할 점은, 0과 #의 차이점이다.

 

0은 무조건 그 자리까지 출력을 한다.

#은 그 자리에 출력할 숫자가 있으면 출력을 하고 없으면 생략한다.

숫자 3.14 로 예를 들어보자면,

 

3.14:0.0000 => 3.1400

3.14:#.#### => 3.14

이렇게 출력이 된다.

 

아무튼, 스트링포멧을 사용해서 원하는 방식으로 출력을 강제할 수 있다.

 

 

정답 코드

using System;

namespace _1차원배열5
{
    class 평균
    {
        static void Main(string[] args)
        {
            // 과목 개수 입력
            int n = int.Parse(Console.ReadLine());

            // 시험 점수 입력
            string[] s = Console.ReadLine().Split();
            float[] score = Array.ConvertAll(s, float.Parse);

            // 최고점을 저장
            float max = float.MinValue;
            
            // 최고점을 찾는다.
            for (int i = 0; i < n; i++)
            {
                if (score[i] > max)
                {
                    max = score[i];
                }
            }
            
            
            // 합계를 저장
            float sum = 0.0f;

            // 점수를 바꾼다.
            for (int i = 0; i < n; i++)
            {
                // 바꾼 점수를 change에 저장함
                score[i] = score[i]/max * 100;
                sum += score[i];
            }

            Console.WriteLine("{0:0.00####}", sum/n);
        }
    }
}
반응형

댓글