[백준 18110] solved.ac / 파이썬 +round함수, 사사오입

권한·2025년 12월 30일

BOJ

목록 보기
31/40

문제의 난이도를 결정하는 문제다. 조건은
1. 아무 의견도 없다면 난이도는 0
2. 의견이 하나 이상 있다면 모든 사람의 의견을 정렬하여 가장 높은 쪽과 가장 낮은쪽의 각 30%는 반영하지 않는다. 30%의 인원을 구할때는 반올림한다.

아이디어

  1. 의견 개수와 난이도 의견을 받는다.
  2. 총 인원의 30%를 구하고 양쪽에서 30%만큼씩 제외한다. -> 슬라이싱으로 제외해서 남기기
  3. 산술평균으로 평균을 구한다.
import sys
input = sys.stdin.readline

n = int(input())
idea = sorted([ int(input()) for _ in range(n)])

ex = round(n * 0.15)
idea = idea[ex : n - ex]

if idea:
    level = round(sum(idea) / len(idea))
    print(level)
else:
    print(0)

ㅠㅠ...

구글링을 하니 round()로 반올림 할 경우 파이썬은 정수부가 홀수인 경우 올림, 짝수라면 내림을 한다. 입력해서도 확인할 수 있다. 이 방법을 오사오입이라고 한다. 문제에서 필요로 하는 것은 오사오입이 아닌 사사오입(4내림5올림) 반올림이다.

해결 방법은
1. round함수를 새로 만들기
2. 값에 0.5를 더하여 int형변환하기

int(2.5 + 0.5) -> 3
int(2.1 + 0.5) -> 2

이다.

최종코드

import sys
input = sys.stdin.readline

n = int(input())
idea = sorted([ int(input()) for _ in range(n)])

ex = int((n * 0.15) + 0.5)
idea = idea[ex : n - ex]

if idea:
    level = int(sum(idea) / len(idea) + 0.5)
    print(level)
else:
    print(0)
profile
티스토리로 옮김

0개의 댓글