코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.
- IT 직무로 취업을 희망하는 지원자들이 코딩테스트를 통과할 수 있는 알고리즘을 활용한 프로그래밍 교육이며, PCCP 자격증 취득이 목표인 프로그램
- 상세 설명 - 수원대학교(대학일자리 플러스센터)
앞서 공부한 해시을 사용해 같은 빈도수 만들기 문제를 풀어보겠다.
소문자 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] |
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"))
최소의 개수를 추가하여 빈도수가 동일하게 되도록 해야하니까 (가장 빈도수가 높은 수 - 해당 문자열 빈도수)
를 하면 된다.
Counter
를 이용해 sH
에 s
의 문자 빈도 수를 센 Counter 객체
를 반환sH_max
에 max(sH.values())
으로 sH
의 빈도 수 중 가장 큰 값을 저장a~e
까지밖에 없으므로 a
부터 e
까지 차례대로 sH_max-sH[char]
을 저장해 return