본문 바로가기
Algorithm

[자료구조/해시] 백준 4358 생태학 - 파이썬(Python)

by jangThang 2022. 3. 4.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    4358번: 생태학

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     나무 개수를 세고, 사전순으로 분포도를 출력하는 문제입니다.

     

    2022.02.12 - [Algorithm] - [자료구조/해시] 백준 1620 나는야 포켓몬 마스터 이다솜 - Python

     

    [자료구조/해시] 백준 1620 나는야 포켓몬 마스터 이다솜 - Python

    [ Contents ] 1. 문제 (링크 참조) 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고,

    star7sss.tistory.com

     위 문제와 비슷합니다. 해시(딕셔너리) 자료구조를 이용해서 '나무'의 개수를 세고 분포도를 계산합니다.

     

     

     

    3. 코드

    import sys
    
    #입력
    tree = sys.stdin.read().rstrip().split('\n')
    tree_dict = dict()
    for i in tree:
        #사전에 있는 나무라면 +1
        if i in tree_dict:
            tree_dict[i] += 1
        #사전에 없다면 새로 추가
        else:
            tree_dict[i] = 1
    
    #출력
    for name, num in sorted(tree_dict.items()):
        print(f"{name} {(num*100/len(tree)):.4f}")

     입력 형식에 끝이 정해져있지 않습니다. EOF(끝)이 없으므로 sys.stdin.read()로 입력을 받습니다. Ctrl+D를 할 때까지 입력을 받으며, 파일 입출력에서는 파일의 끝을 의미합니다.

     입력받은 나무 이름은 딕셔너리에 저장합니다.

     

     

    round(num*100/len(tree),4)

      소수점 아래 4자리까지 반올림해서 출력합니다. round() 함수는 오차가 있어서.. 사용하면 틀립니다. 그 대신 .4f 출력형식을 사용하면 통과합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글