코딩테스트 & 문제 풀이

[Python]백준_9733 : 꿀벌

2023. 11. 3. 00:58

2022년 12월 6일에 작성됨

 

https://www.acmicpc.net/problem/9733

 

9733번: 꿀벌

각각의 일을 한 횟수와 비율을 공백으로 구분하여 출력한다. 출력은 {Re,Pt,Cc,Ea,Tb,Cm,Ex} 순서대로 하며, 비율은 소수점 둘째 자리까지 출력한다. 주어진 목록에 없는 일은 출력하지 않는다. 입력의

www.acmicpc.net

 

 

✍️자료구조 : 해시(Hash)

 

파이썬에서 해시(Hash)는 딕셔너리 자료구조를 통해서 제공한다.
해시를 언제 사용하면 좋을까?


1. 리스트를 쓸 수 없을 때

리스트는 list[1]은 가능하지만 list['a']는 불가능하다.
인덱스를 이용하여 원소에 접근하는데 인덱스가 숫자가 아닌 문자열, 튜플 등을 사용하려고 할 때 딕셔너리를 사용하면 좋다.


2. 빠른 접근과 탐색이 필요할 때

리스트에 비해 딕셔너리 함수의 시간복잡도는 대부분 O(1)이므로 아주 빠른 자료구조이다.
원소를 넣거나 삭제 또는 찾는 일이 많을 때에는 딕셔너리를 사용하는 것이 좋다.


3. 집계가 필요할 때

원소의 개수를 세는 코딩 문제가 있을 때, 해시와 collections 모듈의 Counter 클래스를 사용하면 아주 빠르게 문제를 풀 수 있다.

 

 

 

문제 분석

꿀벌이 한 일을 인덱스로 이용하여 원소에 접근하는 방법을 이용하기 위해 딕셔너리를 사용해본다.

 

 

소스 코드 (⭕)

import sys

work = ['Re', 'Pt', 'Cc', 'Ea', 'Tb', 'Cm', 'Ex']       # 꿀벌이 하는 일 리스트에 담기

bee = dict()        # dict() 함수 호출로 빈 딕셔너리 선언, bee = {}도 같은 기능
for i in work:
    bee[i] = 0      # work의 각 요소들을 키 값으로 하는 bee 딕셔너리 밸류값을 0으로 초기화

cnt = 0
line = sys.stdin.readlines()

for i in line:
    str = list(i.split())      # 입력받은 값을 리스트 형태로 str에 넣음 
    
    for j in str:
        if j in work:
            bee[j] = bee.get(j, 0)+1
        cnt += 1

for i in bee:
    print(i, bee.get(i), '{:.2f}'.format(bee.get(i)/cnt))

print('Total', cnt, '1.00')

 

코드 분석

1. 꿀벌이 하는 일을 work 리스트에 담고, 빈 딕셔너리 bee를 생성해준다.

2. work의 각 요소들을 키 값으로 하는 bee 딕셔너리 밸류값을 0으로 초기화 해준다.

3 .값을 빠른 입력으로 받고, 공백으로 구분하여 리스트 형태로 str에 넣어준다.

4. str의 각 요소들을 j에 넣어서 반복해주는데 만약, j가 work 안에 있다면 j를 키 값으로 하는 밸류값에 +1을 해주고 cnt+1을 해준다.

5. bee의 키 값을 i에 넣고 반복해준다. 키 값과 밸류값과 밸류값을 cnt로 나눈 몫을 출력해준다.

bee[키 값] = 밸류값 --> bee 딕셔너리에 해당 키 값과 밸류값이 각각 생성된다.
bee.get(키 값) == 밸류값
bee.get(키 값, 0) == 키 값이 딕셔너리 안에 없는 값이면 0을 반환함

 

 

 

end

딕셔너리.. 자주 쓰면 유용하게 쓸 수 있을 것 같은데 아직까진 최대한 리스트로 해결하고 싶은 마음ㅠ_ㅠ

 

 

 

'코딩테스트 & 문제 풀이' 카테고리의 다른 글

[Python]백준_14425 : 문자열 집합  (0) 2023.11.04
[Python]백준_1269 : 대칭 차집합  (2) 2023.11.04
[C]백준_2193 : 이친수  (4) 2023.11.02
[C]백준_13699 : 점화식  (1) 2023.11.01
[C]백준_9625 : BABBA  (0) 2023.11.01
  1. ✍️자료구조 : 해시(Hash)
  2. 문제 분석
  3. 소스 코드 (⭕)
  4. 코드 분석
  5. end
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
  • [Python]백준_14425 : 문자열 집합
  • [Python]백준_1269 : 대칭 차집합
  • [C]백준_2193 : 이친수
  • [C]백준_13699 : 점화식
Hicecream
Hicecream
Hicecream
Hicecream
Hicecream
전체
오늘
어제
  • 분류 전체보기 (200) N
    • 코딩테스트 & 문제 풀이 (159)
    • 동아리 활동 (8)
    • 외부 활동 (0)
    • 대학 과제 (3)
    • Git & Git Hub (5)
    • 코딩 프로젝트 (2) N
    • 공부 메모 (17)
    • 일상 (2)
    • 참고사항 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Silver 5
  • 사칙연산
  • Silver 4
  • 정렬
  • 수학
  • 문자열
  • C
  • Bronze 1
  • programmers
  • LV1
  • Bronze 3
  • Bronze 5
  • python
  • C언어 기초 100제
  • Bronze 4
  • 구현
  • Java
  • Code up
  • Bronze 2
  • BOJ

최근 댓글

최근 글

hELLO · Designed By 정상우.
Hicecream
[Python]백준_9733 : 꿀벌
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.