[백준] 18110번 : solve.ac

James·2023년 11월 2일
0

코딩 테스트

목록 보기
30/41
post-thumbnail

문제

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

풀이

[백준] 18110번 : solve.ac 🥈(실버 4)
🎯 25.947%
⏰ 걸린 시간 : 14분

  • 알고리즘 유형 : [정렬]

📌 [포인트]

반올림 해주는 round의 경우 사사오입의 원칙을 따른다.

사사오입이란 ?
반올림할 자리의 수가 5이면 반올림 할 때 앞자리의 숫자가 짝수면 내림하고 홀수면 올림 한다.
때문에 반올림을 따로 구현해야한다.

✔️ [문제 요약]
0. 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
1. 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정한다.
2. 절사평균이란 극단적인 값들이 평균을 왜곡하는 것을 막기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 내는 것을 말한다. 30% 절사평균의 경우 위에서 15%, 아래에서 15%를 각각 제외하고 평균을 계산한다.
3. 따라서 20명이 투표했다면, 가장 높은 난이도에 투표한 3명과 가장 낮은 난이도에 투표한 3명의 투표는 평균 계산에 반영하지 않는다는 것이다.

코드(code)

import sys
import math
input = sys.stdin.readline
N = int(input())

if N == 0:
    print(0)
else:
    opinions = []
    for _ in range(N):
        difficulty = int(input())
        opinions.append(difficulty)
    opinions.sort()
    trim = N*0.15
    if trim - math.trunc(trim) < 0.5:
        trim = math.trunc(trim)
    else:
        trim = math.ceil(trim)

    sums = sum(opinions[0+trim:N-trim])
    answer = sums / (N-2*trim)
    if answer - math.trunc(answer) < 0.5:
        answer = math.trunc(answer)
    else:
        answer = math.ceil(answer)
    print(answer)

회고

사사오입 원칙에 대해서 살펴볼 필요가 있다.

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글