Problem Solving/백준
[BOJ 백준] 4358번 : 생태학(Python, 파이썬)
돌돌김
2021. 1. 24. 04:22
문제는 골드 4였지만, 딕셔너리를 사용하면 쉽게 풀리는 문제다. 단순한 딕셔너리가 아니라, defaultdict를 썼다면 if, else 분기를 안해도 됐을 것이다.
주의해야할 부분은 다음과 같다.
- 입력
- 소숫점 넷째짜리까지 계산
- 소숫점 넷째짜리까지 출력
우선 입력이 밑도 끝도 없이 들어와서 밑도 끝도 없이 끝난다. 들어오는 나무의 개수라도 알려주면 좋겠지만 그딴게 없다. 더 이상 입력이 들어오지 않을 때 까지 계속 받아야 한다. 백준 문제 중 간혹이런게 있다..
굳이 이걸 어떻게 할지 고민하지말고, 이런 건 그냥 다른 사람의 풀이를 보며 입력 부분만 확인하자.
그래도 이게 뭔지 키워드는 알고 가면 좋다.
- EOF
다음으로 문제에서 요구사항인 소숫점 넷째짜리 까지 계산은 파이썬 내장함수인 round를 사용하면 쉽게 해결 가능하다. 또한, 백분율로 나타내야하므로 100을 곱해주자.
그리고, 이런식으로만 하면 "50" 과 같은 숫자는 50.00 이렇게 끝난다. 소숫점 넷째 자리까지 출력해야하므로 "50.0000" 이렇게 출력해야한다.
이것은 '%' 를 사용해서 해결할 수 있다. 예를들어 소숫점 넷째자리 까지 출력하려면 아래와 같이 하면 된다
- '%.4f' %value
소스코드
import sys
trees = {}
tree_num = 0
for line in sys.stdin:
if line == '\n':
break
tree = line.rstrip()
tree_num += 1
if tree in trees:
trees[tree] += 1
else:
trees[tree] = 1
sorted_trees = sorted(trees.items(), key=lambda x:x[0])
for k, v in sorted_trees:
percentage = round((v/tree_num)*100, 4)
print(k, '%.4f' %percentage)