[백준] 꿀벌

Ocean·2023년 3월 3일
0

알고리즘 스터디 v2

목록 보기
4/17
post-thumbnail

꿀벌 문제 보러가기

📝 문제

꿀벌이 하는 일은 다음과 같이 분류할 수 있다.

휴식(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

🗝️ 풀이 1

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로 존재하는 경우 값을 출력한다.

🗝️ 풀이 2

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로 넣어두는 게 생각하지 못한 아이디어였다.

profile
chick! chick!

0개의 댓글