[백준] 생태학 풀이

문제 자체는 어렵지 않으나, EOF 처리와 소숫점 출력이 까다로웠다.

일단 stdin.readline() 함수의 경우 EOF 처리가 조금 다르다고 한다.
추후 자세히 공부하기로 하고, 일단 input으로 문제를 해결하였다.
try - except 문을 통하여 input 단에서 에러가 발생하면 반복문을 종료하도록 하였다.

소숫점 출력도 round() 함수를 사용하면 에러가 발생한다. 우리가 파이썬에서 보는 float 형태의 숫자는 정확한 숫자가 아니라 가장 근접한 수인 경우가 있는데, 이 차이가 반올림 결과에 영향을 미치는 경우가 있다.

소숫점 5번째 자리에서 반올림하므로 0.00005를 더한 뒤, 문자열로 바꾸었고 소숫점(.)의 인덱스를 찾은 뒤 그 뒤로 4자리 더 출력해주면 된다.


dic = {}

while True:

    try:
        a = input()

        if a in dic:
            dic[a] += 1

        else:
            dic[a] = 1

    except:
        break

arr = list(dic.items())
arr.sort()
total = sum(dic.values())

for i in range(len(arr)):
    k = arr[i][1] / total * 100
    k += 0.00005
    k = str(k)
    idx = k.find('.')
    k = k[:idx + 5]
    print(arr[i][0], k)

좋은 웹페이지 즐겨찾기