본문 바로가기

Problem Solving/boj

[BOJ] 4358. 생태학(Python)

 

4358번: 생태학

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

www.acmicpc.net

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

  • 사용 자료구조 : 해시(Hash)

 

파이썬 코드는 다음과 같다.


from sys import stdin
input = stdin.readline

nameInfo = dict()   # 나무 이름 등장 횟수
nameSet = set()     # 중복 없앤 이름 리스트
cnt = 0
while True:
    name = input().strip()
    if not name:
        break
    if name not in nameInfo.keys():
        nameInfo[name] = 1
        nameSet.add(name)
    else: nameInfo[name] += 1
    cnt += 1

nameLst = sorted(list(nameSet))		# 사전 순으로 정렬
for name in nameLst:
    print("%s %.4f"%(name, nameInfo[name] / cnt * 100))		# 소수 넷째 자리까지

  • 시간 : 412ms / 메모리 : 125156kb
  • 고찰 : 간단한 hash 문제. 소수 몇 째자리까지 구하는 코드 알아두자!