[백준] 생태학

슬기·2022년 10월 4일
0

문제

생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.



해결방법

  • 입력 값의 길이가 0이라면 더 이상 값이 들어오지 않는 것이므로 반복문을 종료시킨다.
  • 딕셔너리 사용해서 종의 개수를 계산한다.
  • 시간초과 발생할 수 있으므로 sys.stdin.readline 사용한다.
  • 주의할 점은 소수점 계산할 때, round()를 사용하면 에러가 발생하므로 %.4f를 사용해야 한다.



소스코드

import sys
input = sys.stdin.readline

dic = {}
n = 0

while True:
    tree = input().rstrip()
    if len(tree) == 0:
        break
    if tree in dic:
        dic[tree] += 1
    else:
        dic[tree] = 1
    n += 1

ans = sorted(dic.items(), key=lambda x: x[0])

for answer in ans:
    print(answer[0], "%.4f" % (answer[1] * 100 / n))


💡 계속 오류가 나서 뭐가 틀렸나 했는데.. round()를 사용하면 통과가 안된다.. 게시판에 반례 검색해보다가 알게 되었다. 파이썬 공식 문서를 참고하면 아래와 같은 내용을 확인할 수 있다.

참고 : float에 대한 round() 의 동작은 예상과 다를 수 있습니다: 예를 들어, round(2.675, 2) 는 2.68 대신에 2.67 을 제공합니다. 이것은 버그가 아닙니다: 대부분의 십진 소수가 float로 정확히 표현될 수 없다는 사실로부터 오는 결과입니다.

profile
📚 프론트엔드 개발자의 개발 일기

0개의 댓글