alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 4358 생태학_파이썬 본문
4358 생태학 https://www.acmicpc.net/problem/4358
문제 풀기 전 공부할 것 : 자료 구조, 문자열, 트리, 트리를 사용한 집합과 맵, 트라이, defaultdict
풀이 1
<내용>
- 입력을 받고 만약 입력이 비어있으면 입력받는 것을 멈춘다.
- 입력받을 때 defaultdict에 value 값에 1을 더해준다.
- 동시에 전체 나무 수를 찾기 위해 n에도 1을 더해준다.
- 각 종의 이름을 사전 순으로 출력하기 위해 key값들을 따로 저장해 정렬한다.
- 비율이 소수점 넷째 자리까지 출력하도록 한다.
<코드>
from collections import defaultdict
import sys
input = sys.stdin.readline
trees = defaultdict(int)
n = 0
while True:
tree = input().rstrip()
if not tree:
break
trees[tree] += 1
n += 1
tree_lst = list(trees.keys())
tree_lst.sort()
for tree in tree_lst:
print('%s %.4f' %(tree, trees[tree]/n*100))
+) defaultdict 없이 해결하기
풀이 2
<내용>
- defaultdict를 사용하지 않고 해결하는 방법
- dict에 tree가 key로 있으면 해당 value에 +1을 하는 것
- dict에 tree가 key로 없으면 tree를 key로 하고 value가 1인 dict의 item을 만드는 것
<코드>
import sys
input = sys.stdin.readline
trees = {}
n = 0
while True:
tree = input().rstrip()
if not tree:
break
if tree in trees:
trees[tree] += 1
else:
trees[tree] = 1
n += 1
tree_lst = list(trees.keys())
tree_lst.sort()
for tree in tree_lst:
print('%s %.4f' %(tree, trees[tree]/n*100))
풀이 3
<내용>
- Python 입출력 방법을 다른 방법으로 해결하기
<코드>
from collections import defaultdict
import sys
trees = defaultdict(int)
n = 0
for line in sys.stdin:
if line == '\n':
break
tree = line.rstrip()
trees[tree] += 1
n += 1
tree_lst = list(trees.keys())
tree_lst.sort()
for tree in tree_lst:
print('%s %.4f' %(tree, trees[tree]/n*100))
복습
Python 입력 방법
- import sys
- for line in sys.stdin:
- print(line)
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1292 쉽게 푸는 문제_파이썬 (0) | 2020.08.31 |
---|---|
[알고리즘][Python] 백준(BOJ) 2217 로프_파이썬 (0) | 2020.08.30 |
[알고리즘][Python] 백준(BOJ) 14425 문자열 집합_파이썬 (0) | 2020.08.28 |
[알고리즘][Python] 백준(BOJ) 3649 로봇 프로젝트_파이썬 (0) | 2020.08.27 |
[알고리즘][Python] 백준(BOJ) 5052 전화번호 목록_파이썬 (2) | 2020.08.26 |
Comments