본문 바로가기
알고리즘/백준 BOJ

[ BOJ/C# ] 18110 solved.ac

by 왹져박사 2023. 10. 25.

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

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

굉장히 난관이 많았던 문제이다....

1. 반올림을 내장함수가 아닌 직접 구현해야 했다. 

2. 런타임 에러 (InvalidOperation) : 0의 경우를 넣지 않아 생긴 문제였다. 

3. 시간 초과 : list 대신 int 배열로 바꾸었다. 

4. int로 바꾸니 arr.Sum()에서 int로 값이 나와 값이 버려지는 문제가 생겼다. 이는 형식을 double로 바꾸어 해결.

 

반례도 거의 없던 문제라 정말 힘들었다..!🥲🥲

using System;
using System.IO;

namespace B18110
{
    class Program
    {
        static void Main()
        {
            StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
            StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));

            int n = int.Parse(sr.ReadLine());
            int result = 0;
            if (n == 0) result = 0;
            else
            {
                int p;
                //인원의 15%의 반올림 계산
                if ((n * 0.15) % 1 < 0.5) p = (int)(n * 0.15);
                else p = (int)(n * 0.15) + 1;
                //난이도 입력
                double[] arr = new double[n];
                for (int i = 0; i < n; i++) arr[i] = (int.Parse(sr.ReadLine()));
                //정렬
                Array.Sort(arr);
                //위 아래 제거
                for (int i = 0; i < p; i++) arr[i] = 0;
                for (int i = 1; i <= p; i++) arr[n - i] = 0;
                //평균
                double average = arr.Sum() / (n - p * 2);
                //평균의 반올림
                if (average % 1 < 0.5) result = (int)average;
                else result = (int)average + 1;
            }
            sw.Write(result);
            sr.Close();
            sw.Flush();
            sw.Close();
        }
    }
}

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[ BOJ/C# ] 11050 이항 계수 1  (1) 2023.10.28
[ BOJ/C# ] 2108 통계학  (0) 2023.10.27
[ BOJ/C# ] 16928 뱀과 사다리 게임  (0) 2023.10.24
[ BOJ/C# ] 1697 숨바꼭질  (0) 2023.10.24
[ BOJ/C# ] 1654 랜선 자르기  (0) 2023.10.23