프로그래밍/Python

백준_python 4358번 생태학 (소수 반올림)

O'bin 2024. 6. 10. 13:30

<문제 링크>

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

 

<정답 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
from collections import defaultdict
from decimal import Decimal, ROUND_HALF_UP
input = sys.stdin.readline
 
trees = defaultdict(int)
 
while True:
    tree = input().rstrip()
 
    # 입력값이 더 없으면 입력 종료
    if tree == '':
        break
    
    trees[tree] += 1
 
for i in sorted(trees):
    v = Decimal(f'{trees.get(i) / sum(trees.values()) * 100}')
    print(i, v.quantize(Decimal('1.0000'), rounding=ROUND_HALF_UP))
cs

 

나무이름 : 개체수 형태로 trees 딕셔너리에 입력 후,

( 특정 종 그루 수 / 전체 나무 수 ) * 100 으로

전체에서 특정 종이 차지하는 비율을 구하는 문제다.

 

문제 접근 자체는 쉬우나 반올림이 문제였다.

Decimal 모듈을 사용해 해결할 수 있다.

 

 line 18 )  반올림 대상 소수를 Decimal 객체로 변환

 line 19 )  Deciaml 객체를 반올림하여 소수 네번째 자리까지 출력

         Decimal('1.0000') : 소수점 네 자리 형식

         rounding=ROUND_HALF_UP : 반올림 형식 지정, 사사오입 방식으로 반올림(4까지는 버림, 5부터는 올림)