[PCCP] 해시 - 같은 빈도수 만들기 | 파이썬

SangJin Ham·2023년 6월 27일
0
post-thumbnail

코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.


해시 - 같은 빈도수 만들기

앞서 공부한 해시을 사용해 같은 빈도수 만들기 문제를 풀어보겠다.


문제

소문자 a, b, c, d, e로 이루어진 문자열이 주어지면 해당 문자열에서 a, b, c, d, e의 최소의 개수를 추가하여 a, b, c, d, e의 빈도수가 동일하게 되도록 해야 합니다.
동일빈도수가 되는 최소 추가 개수를 알파벳 a, b, c, d, e순으로 배열에 저장하여 반환하는 프로그램을 작성하세 요.
만약 주어진 문자열이 "aaabc" 라면 빈도수는 a:3, b:1, c:1, d:0, e:0 이고 최소 개수를 추가하여 동일 빈도수가 되게 하려면 b를 2개, c를 2개, d를 3개, e를 3개 추가하면 모두 빈도 수가 3개로 동일해집니다.


입출력 예

입력(s)출력(answer)
"aaabc"[0, 2, 2, 3, 3]
"aabb"[0, 0, 2, 2, 2]
"abcde"[0, 0, 0, 0, 0]
"abcdeabc"[0, 0, 0, 1, 1]
"abbccddee"[1, 0, 0, 0, 0]

제한사항

  • 문자열 s의 길이는 100을 넘지 않습니다.

코드

from collections import Counter, defaultdict
def solution(s):
    answer = []
    ae = 'abcde'

    sH = Counter(s)

    sH_max = max(sH.values())

    for char in ae:
        answer.append(sH_max - sH[char])
    
    return answer

print(solution("aaabc"))
print(solution("aabb"))
print(solution("abcde"))
print(solution("abcdeabc"))
print(solution("abbccddee"))

풀이

최소의 개수를 추가하여 빈도수가 동일하게 되도록 해야하니까 (가장 빈도수가 높은 수 - 해당 문자열 빈도수)를 하면 된다.

  1. Counter를 이용해 sHs의 문자 빈도 수를 센 Counter 객체를 반환
  2. sH_maxmax(sH.values())으로 sH의 빈도 수 중 가장 큰 값을 저장
  3. 알파벳은 a~e까지밖에 없으므로 a부터 e까지 차례대로 sH_max-sH[char]을 저장해 return
profile
끄적끄적

0개의 댓글