티스토리 뷰

- 문제 링크

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

- 풀이

실버 3 난이도의 구현, 정렬 태그가 달려있는 문제였다. 정답률이 25% 밖에 안되서 이 문제가 어렵나 ? 하고 풀어보았다. 

직접 풀어보니 절사 평균과 보정 평균을 구할 때 코드상에는 크게 문제가 없었는데 틀려서.. 어 뭐가 문제지 하고 조금 찾아보니 부동소수점에 대한 문제였다. type을 float로 받으면 생기는 문제인데,  해당 문제를 해결하기 위해서는 코드의 맨 밑에 줄을 보면 + 0,00...1 을 더해줌으로서 해결할 수 있다.

 

절사 평균을 구하기 위해 res 배열에 arr의 K번째 부터 len(arr)-K 곧 전체 배열의 길이-K 의 범위만큼 arr의 값을 append 해줌으로 절사 평균을 구했다.

 

보정 평균을 구하기 위해서 밑의 j for문을 보면 시작지점부터 K만큼 arr의 값을 arr[K]의 값으로 변경했다.

그리고 k for문을 보면, arr배열의 끝 지점에서 부터 배열의 끝 지점-K 만큼 1씩 내려오며 값을 변경해줌으로 보정평균 값을 구했다.

-  코드

import sys
input = sys.stdin.readline

N, K = map(int, input().split())

arr = []
for _ in range(N):
    arr.append(float(input()))

arr.sort()
res = []
for i in range(K, len(arr)-K):
    res.append(arr[i])

for j in range(K):
    arr[j] = arr[K]

for k in range(len(arr)-1, len(arr)-K-1, -1):
    arr[k] = arr[len(arr)-K-1]

print("{:.2f}".format(sum(res) / len(res)+ 0.00000001))
print("{:.2f}".format(sum(arr) / len(arr)+ 0.00000001))

 

요리보고 저리봐도 잘 짠 코드는 전혀 아니다.. 더 우아하게 짤 수 있도록 노력하자 !

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함