꿀벌이 하는 일은 다음과 같이 분류할 수 있다.
휴식(Re), 순찰(Pt), 방청소(Cc), 꽃가루 먹기(Ea), 새끼 돌보기(Tb), 벌집 짓기와 관리(Cm), 외부 활동(Ex)
한 꿀벌이 1시간 동안 한 일이 주어졌을 때, 각각을 몇 번 했고, 비율이 어떻게 되는지 구하는 프로그램을 작성하시오.
입력
입력은 꿀벌이 한 일이 공백과 줄바꿈으로 구분되어서 주어진다. 최대 24개의 일을 한다.
출력
각각의 일을 한 횟수와 비율을 공백으로 구분하여 출력한다. 출력은 {Re,Pt,Cc,Ea,Tb,Cm,Ex} 순서대로 하며, 비율은 소수점 둘째 자리까지 출력한다. 주어진 목록에 없는 일은 출력하지 않는다.
입력의 마지막 줄에는 "Total<total>
1.00"을 출력하며,<total>
은 꿀벌이 한 일의 개수이다.
입력 1
Cc Pt Pt Re Tb Re Cm Cm Re Pt Pt Re Ea Ea Pt Pt
Pt Re Re Cb Cb Pt Pt Cb
입력 2
Re 6 0.25
Pt 9 0.38
Cc 1 0.04
Ea 2 0.08
Tb 1 0.04
Cm 2 0.08
Ex 0 0.00
Total 24 1.00
import sys
types = ['Re', 'Pt', 'Cc', 'Ea', 'Tb', 'Cm', 'Ex']
arr = []
lines = sys.stdin.readlines()
for line in lines:
arr = arr + list(line.split())
total = len(arr)
hashs = {}
for i in arr:
if i in hashs:
hashs[i] += 1
else:
hashs[i] = 1
for t in types:
if t in hashs:
print('{} {} {:.2f}'.format(t, hashs[t], hashs[t]/total))
else:
print('{} 0 0.00'.format(t))
print(f'Total {total} 1.00')
input을 arr로 받은 뒤 arr를 순회하면서 값이 hashs(딕셔너리)에 key로 존재할 경우 해당 키의 값을 1씩 증가하고, key로 존재하지 않는 경우 hashs에 추가해준다. (값은 1)
출력해야하는 7가지 work type들은 types에 넣어두고 출력 시 해당 types를 순회하며 값이 hashs의 key로 존재하는 경우 값을 출력한다.
import sys
input = sys.stdin.readline
arr = []
lines = sys.stdin.readlines()
for line in lines:
arr = arr + list(line.split())
work_dict = {'Re': 0, 'Pt': 0, 'Cc': 0, 'Ea': 0, 'Tb': 0, 'Cm': 0, 'Ex': 0}
for work in arr:
if work in work_dict:
work_dict[work] += 1
work_list = list(work_dict)
work_value = list(work_dict.values())
for i in range(7):
print("{} {} {:.2f}".format(work_list[i], work_value[i], work_value[i]/len(arr)))
print("Total {} 1.00".format(len(arr)))
스터디 팀원들 코드 중에 깔끔하다고 생각한 코드. 딕셔너리를 선언할 때부터 미리 출력을 해야하는 값들을 key로 넣어두는 게 생각하지 못한 아이디어였다.