728x90
문제
# 절사평균을 이용한 난이도 구하기
# 30%의 절사평균을 통해 난이도를 구해야 한다. (즉, 위에서 15%, 아래에서 15%를 제외한 평균을 구한다)
# Input1 : 첫 번째 줄은 난이도 의견의 개수(반복 수) N이 주어진다.
# Input2 : N개의 줄로 각 난이도 평가가 주어진다.
원리
1. 입력을 리스트로 받는다.
2. N에 대해 0.15*N 과 0.75*N 인 인덱스 사이의 값에 대한 평균을 구한다.
(즉, 앞/뒤로 15%)
3. 단, 앞/뒤로 15%에 해당하는 값이 정수가 아닐경우, round() 함수를 이용해 반올림한다.
* round()는 math 라이브러리에 포함되어 있다.
import math
정수 = round(소수)
4. 결과값도 마찬가지로 round()를 이용해 반올림한다.
학습 내용
1. 파이썬에서의 올림/내림/반올림
: Java의 java.math.*와 유사한 개념
import math
math.ceil() # 올림
math.floor() # 내림
round() # 반올림
2. 파이썬의 반올림 체계
기존의 수학적 산술인 사사오입과 다르게, 파이썬의 경우 오사오입 체계로 반올림이 이루어 진다.
쉽게말해 2.5를 반올림하면 2.0을 반환한다는 말이다.
나의 코드
[실패] 파이썬의 반올림 체계(오사오입을 알지 못했을 경우)
더보기
import math
N = int(input())
list = list()
for i in range(0, N) :
list.insert(i, int(input()))
list.sort()
min = round(N * 0.15)
max = round(N * 0.75)
sum = 0
if N==0 :
print(0)
elif N==1 :
print(list[0])
else :
for i in range(min, max) :
sum += list[i]
sub = N-(min*2)
print(round(sum/sub))
레퍼런스
레퍼런스의 경우, math 라이브러리의 round() 대신, 사사오입 방식과 같은 계산이 될 round2() 함수를 구현했다.
def round2(num):
return int(num) + (1 if num - int(num) >= 0.5 else 0)
참고 링크 : https://ywtechit.tistory.com/210
728x90
'알고리즘 저장소 (일반방식과 나만의 풀이) > Python' 카테고리의 다른 글
[파이썬 익숙해지기] no7662: 이중 우선순위 큐 - Heap 트리 및 입출력연습 (0) | 2023.07.08 |
---|---|
[파이썬 익숙해지기] no27866:문자와 문자열 - 문자열 슬라이싱 (0) | 2023.07.07 |
[파이썬 익숙해지기] no2083:럭비클럽 - StringTokenizer (0) | 2023.07.01 |
[파이썬 익숙해지기] no16170:오늘의 날짜는? (0) | 2023.06.30 |
[파이썬 익숙해지기] no5341:피라미드 (0) | 2023.06.29 |