4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
아이디어:
이번 주제가 map, set이므로 이 자료구조를 활용해서 풀어야 할 것 같은데.. 파이썬에서 map은 딕셔너리인데 입력받으면서 정렬이 한번에 되는 건 아닌 듯 하다. 그래서 일단 입력을 모두 받고(받으면서 value에 빈도를 업데이트 해주고) 키값에 따라 정렬을 한번에 해주는 방향으로 짜보았다.
구현에 제일 애를 먹었던 부분은 입력부분이었다. 저번에 했던 것처럼 try-except 를 쓰면 될 거라고 생각했다가.. 저번에는 입력을 정수로 변환하는 부분에서 에러가 났기 때문에 가능한 거였고 이번에는 그냥 문자열로 받기 때문에 try-except를 쓰면 에러가 나지 않아서 break가 되지 않는다는 걸 발견했다. 그래서 그냥 if문을 사용해서 break 조건을 만들었다.
import sys
dic = {}
total = 0
while(True):
s = sys.stdin.readline().rstrip()
if (s==""): break
if s not in dic:
dic[s] = 1
else:
dic[s]+=1
total+=1
dic = sorted(dic.items())
for key, value in dic:
ans = value/total*100
print(key, "%.4f" % ans)
'알고리즘💻 > map&set&number theory' 카테고리의 다른 글
BOJ 20302번: 민트 초코 (0) | 2021.02.19 |
---|---|
BOJ 16563번: 어려운 소인수분해 (0) | 2021.02.19 |
BOJ 14490번: 백대열 (0) | 2021.02.19 |
BOJ 2002번: 추월 (0) | 2021.02.19 |