백준(BOJ) 문자열 문제집: 생태학(골드 5)
문제 출처: https://www.acmicpc.net/problem/4358
1. 알고리즘
dictionary 자료형 사용하면 쉬운 문제. 각 나무 이름을 key, 나온 횟수(갯수)를 value로 세어 주고 나중에 평균 출력만 해주면 된다. 다만 데이터 입력 받는 부분 때문에 좀 고심했음.
- 한줄씩 입력받아 오른쪽 공백 제거
- 나무 dictionary에 나무 이름을 key, 횟수 카운팅을 value로 데이터 삽입
- 전체 나무 갯수 카운팅
- 나무 이름 기준 사전 순 정렬된 데이터에 대해 비율 계산 후 f-string으로 소숫점 4째자리 까지 출력
2. 유의사항
- 주어지는 나무의 갯수는 주어지지 않음. 나무 데이터 입력의 끝은 개행 문자로 확인해주면 됨.
3. 어려웠던 점, 해결 방법
- 파이썬 EOF가 공백이라 어떻게 구별해야할 지 고민했었음.
-
#틀린 코드 #입력 끝이 공백이니까 값이 없을 때 종료하도록 했었음 while True: input_tree = list(map(str, input_func().split())) if not input_tree: break
- 입력 데이터 종료를 표현하기 위한 개행 문자가 있어서 '\n'로 구분함
-
4. 소스코드
상세 코드 설명은 주석 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import sys
from collections import defaultdict
if __name__ == '__main__':
tree_dict = defaultdict(int) #나무 딕셔너리
tree_count = 0 #전체 나무 갯수
#데이터 입력 반복
for input_line in sys.stdin:
#개행 문자가 입력되는 경우 = 입력 끝
if input_line == '\n':
break
input_tree = input_line.rstrip() #공백 문자 제거
tree_dict[input_tree] += 1 #딕셔너리 데이터 삽입
tree_count += 1 #전체 나무 갯수 카운팅
#나무 딕셔너리 키 값에 대해 정렬된 순서대로 반복
for tree, count in sorted(tree_dict.items()):
ratio = (count/tree_count)*100 #비율 계산
print(f'{tree} {ratio:.4f}') #f-string으로 '나무 이름 비율' 출력
|
cs |
5. 고민
- f-string 너무 간편...좋더라
'Algorithms > 백준' 카테고리의 다른 글
[백준_12904]A와 B with Python (0) | 2021.06.30 |
---|---|
[백준_2671]잠수함식별 with Python (0) | 2021.06.30 |
[백준_1013]Contact with Python (0) | 2021.06.24 |
[백준_1747]소수&팰린드롬 with Python (0) | 2021.06.23 |
[백준_19640]화장실의 규칙 with Python (0) | 2021.06.16 |
댓글