본문 바로가기
알고리즘/자료구조

[백준][Python] 4358번 생태학

by 임짠짠 2022. 2. 21.
반응형
 

4358번: 생태학

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어

www.acmicpc.net

코드

import sys

total = 0
dic = dict()
while 1:
    word = sys.stdin.readline().rstrip()
    if word == '':
        break
    total += 1   
    if word in dic:   # 전에 이미 나왔으면
        dic[word] += 1
    else:
        dic[word] = 1
sdic = dict(sorted(dic.items()))
for i in sdic:
    a = sdic[i]
    per = (a / total * 100)
    
    print("%s %.4f" %(i, per))

 

설명

아무 입력도 들어오지 않을 때까지 while문을 돌려서 문자를 받는다. 

딕셔너리를 사용했는데 만약 전에 들어온 값이면 value값을 1 증가시켜주고, 처음 들어온 값이면 value값을 1로 저장해준다. total 변수는 총 들어온 단어 개수로 나중에 백분율 계산을 위해 만들어주었다. 

처음에 round를 이용하여 반올림을 했더니 틀렸다고 나왔다. 

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

이렇다고 한다..

 

반응형

댓글