solved.ac
풀이
풀었는데 계속해서 무슨 문제가 있어서 틀렸습니다. 가 나오는지 몰라서 이것저것 해보다가
2
1
4
를 넣어보니 3이 아닌 2가 나오는 것을 보고, 아... round에서 문제가 생겼구나 싶어서 round함수를 내 입맛에 맞게 바꿔주고 아래처럼 풀었다.
# 어떤 문제의 난이도는 그 문제를 푼 사람들이 제출한 난이도 의견을 바탕으로 결정
# 아직 아무의견이 없다면 문제의 난이도는 0으로 결정
# 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정
# 절사평균 가장 큰 값과 가장 작은 값들을 제외하고 평균
# 고로 30% 절사 평균은 위에서 15%, 아래에서 15%를 제외하고 평균을 계산
# 제외 해야할 사람이 소수일경우 반올림한다.
# 평균도 소수일 경우 반올림한다.
def half_ceil(n):
if n%1 >= 0.5:
return int((n//1) + 1)
else:
return int(n//1)
import sys
N = int(sys.stdin.readline())
level_list = []
if N == 0:
print(0)
else:
for _ in range(N):
tmp = int(sys.stdin.readline())
level_list.append(tmp)
# level_list의 길이를 구하고, 양옆 제외할 갯수를 구하기.
# 그리고 level_lsit를 정렬해서 슬라이싱 후, 평균 구하기
M = len(level_list)
except_nums = half_ceil(M*0.15)
f_level_list = sorted(level_list)[except_nums:M-except_nums]
everage = sum(f_level_list)/(M-(2*except_nums))
print(half_ceil(everage))
이렇게 하니 해결되었다.
다른 사람 풀이
내 코드보다 훨씬 간결하게 느껴진다.
여기서도 round 문제를 겪었는지 int(n+0.5)로 round를 재정의 함으로 나처럼 0.5에서 올림이 아닌 내림이 되는 문제를 해결했다.
그 외는 근본적 풀이는 나와 동일하다고 봐도 될 듯하다.
import sys
def round(n):
return int(n + 0.5)
n = int(input())
opinions = [int(sys.stdin.readline()) for _ in range(n)]
if not opinions:
print(0)
else:
cut = round(len(opinions) * 0.15)
array = sorted(opinions)[cut : len(opinions) - cut]
print(round(sum(array) / len(array)))
'알고리즘 > 백준' 카테고리의 다른 글
백준 실버3 1003. 피보나치 함수 (python) (1) | 2024.02.24 |
---|---|
백준 실버3 1966. 프린터 큐 (python) (0) | 2024.02.20 |
백준 실버5 1676.팩토리얼 0의 개수 성공 (python) (1) | 2024.02.14 |
백준 브론즈3 2490. 윷놀이 (python) (1) | 2024.01.31 |
백준 실버1 1149. RGB거리 (python) (1) | 2024.01.31 |