Today Sangmin Learned
728x90

링크

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

난이도(solved.ac 참고)

골드5

풀이

 

 

딕셔너리로 구했는데 자꾸 시간 초과가 떠서 defaultdict를 사용해서 풀었다. 처음에는 try except로 하려고 했는데 생각해보니까 input값에서 공백을 제거한 값이 아무것도 없으면 더이상 진행하지 않으면 되는 것이었다.

 

defaultdict(int)를 주게 될 경우, 값을 부여했을 때 숫자 형태로 저장이 된다. 아래 예시를 보면 이해가 될 것이다.

from collections import defaultdict
a = defaultdict(int)
b = defaultdict(list)
c = input()
a[c] += 1
b[c] = ['steadily', 'worked']
print(a)
print(b)

# input값을 3으로 줬을 경우
# defaultdict(<class 'int'>, {'3': 1})
# defaultdict(<class 'list'>, {'3': ['steadily', 'worked']})

input값은 무엇이든 들어갈 수 있고 그에 해당하는 values, 즉 숫자가 +1이 되는 것이다. 이 숫자가 바로 defaultdict의 속성을 int로 지정해줬을 때에 가능한 것이다. list로 설정한다면 values는 list 형태가 된다. 물론 넣어주는 값도 지정한 속성에 따라야 한다.

count는 전체 개수를 구하기 위해 매 while문을 돌때마다 더해준다.

 

이 defaultdict를 사용하면 각 input값에 대한 빈도를 아주 쉽게 구할 수 있다. result[a] += 1을 통해 input으로 넣은 단어들에 대한 카운트가 1씩 증가하게 된다. 이제 result는 {key:value}의 형태로 되어있을 것이므로 result를 도는 반복문에서 key에 해당하는 문자열과 value에 해당하는 횟수 * 100을(%로 표현하라고 했으므로) 위에서 구한 count로 나눠주면 된다.

profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!