alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 4358 생태학_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 4358 생태학_파이썬

알파이 2020. 8. 29. 08:53

 

4358 생태학    https://www.acmicpc.net/problem/4358

 

4358번: 생태학

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

www.acmicpc.net

 

 

 

 

 

 

 

 

 

문제 풀기 전 공부할 것 : 자료 구조, 문자열, 트리, 트리를 사용한 집합과 맵, 트라이, 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
반응형
Comments