https://www.acmicpc.net/problem/4358
4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
문제
풀이
dictionary를 알고 있다면 쉽게 풀리는 문제이다.
입력값으로 주어지는 나무들에 대해서 dictionary에 이미 있는지 검사하고 만약 있다면 해당 나무의 값을 +1하고 없다면 dictionary에 값을 넣으면서 기본값을 1로 잡아주면 된다.
풀이도 간단하고 시간복잡도 역시 높지 않으며 문제풀이의 로직 역시 다른 사람들과 동일했다. 그러나 시간초과가 발목을 잡았다.
조금더 찾아보니 그냥 입력을 받는 input은 시간을 조금더 잡아 먹는다고 한다. 그렇기에 sys모듈을 import하고 해당 모듈안에 존재하는 stdin.readline을 사용해야 한다.
코드
import sys
input = sys.stdin.readline
def sol():
D = dict()
NumberOfTree = 0
while True:
Tree = input().rstrip()
if not Tree:
break
if Tree in D:
D[Tree] += 1
else:
D[Tree] = 1
NumberOfTree += 1
Datas = list(D.keys())
Datas.sort()
for Data in Datas:
print('%s %.4f' %(Data, D[Data]/NumberOfTree*100))
sol()
'백준' 카테고리의 다른 글
백준 15486 이진수 덧셈(파이썬) (1) | 2023.07.10 |
---|---|
백준 2812 크게 만들기 (파이썬) (0) | 2023.07.06 |
백준 14620 꽃길 (파이썬) (0) | 2023.06.24 |
백준 2671 잠수함식별(파이썬) (0) | 2023.06.23 |
백준 1212 8진수 2진수 (파이썬) (0) | 2023.04.20 |