4358. 생태학

sen·2021년 10월 27일
0

BOJ

목록 보기
37/38
post-thumbnail

문제

백준 4358번 생태학


풀이

딕셔너리에 종이름과 개수를 저장한다.
각 종이 차지하는 비율을 계산한 후 반올림 할 때 round() 함수는 해당 자리의 수가 5일 때 값이 불분명해지기 때문에 사용하지 않고 직접 연산을 해줬다.

소수점 넷째자리까지 반올림이므로 rate에 0.00005를 더해준 뒤에 버림을 하면 같은 결과가 나온다.(math.floor()는 정수를 리턴하기 때문에 사용할 수 없었다.)
rate를 문자열로 바꾼 후 rate의 정수부 길이에 따라 if-elif-else를 통해 소수점 넷째자리까지 버림할 수 있도록 슬라이싱 했다.

이럴 필요없다.
그냥 프린트할 때 포맷팅하면 된다. 하도 오랜만에 ps하니까..별걸 다 잊어먹는다.

import sys

species = dict()
x = sys.stdin.readline()[:-1]
while x:
    species[x] = species[x] + 1 if x in species else 1
    x = sys.stdin.readline()[:-1]

n = sum(species.values())
for tree, cnt in species.items():
    rate = (cnt / n * 100) + 0.00005
    if rate < 10: species[tree] = str(rate)[:6]
    elif rate < 100: species[tree] = str(rate)[:7]
    else: species[tree] = str(rate)[:8]

species = sorted(species.items())
for tree, rate in species: print(tree, rate)

수정된 코드

import sys

species = dict()
x = sys.stdin.readline()[:-1]
while x:
    species[x] = species[x] + 1 if x in species else 1
    x = sys.stdin.readline()[:-1]
    
n = sum(species.values())
for tree, cnt in species.items():
    species[tree] = (cnt / n * 100) 
species = sorted(species.items())
for tree, rate in species: print('%s %.4f'%(tree, rate))
profile
공부 아카이브

0개의 댓글