[PCCP] 해시 - 학급 회장 | 파이썬

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

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


해시 - 학급 회장

앞서 공부한 해시을 사용해 학급 회장 문제를 풀어보겠다.


문제

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
매개변수 s에 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 주어지면 어떤 기호의 후보가 학급 회장이 되었는지 반환하는 프로그램을 작성하세요.
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.


입출력 예

입력(s)출력(answer)
"BACBACCACCBDEDE"C
"AAAAABBCCDDDD"A
"AABBCCDDEEABCB"B
  • 입력예제 1 설명
    A기호 3표, B기호 3표, C기호 5표, D기호 2표, E기호 2표를 받아 C가 학급회장이 되었습니다.

제한사항

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

defaultdict를 이용한 코드

from collections import defaultdict

def solution(s):
    answer = ""

    sH = defaultdict(int)
    for x in s:
        sH[x] += 1

	maxC = 0

    for key in sH:
        if sH[key] > maxC:
            maxC = sH[key]
            answer = key

    return answer


print(solution("BACBACCACCBDEDE"))
print(solution("AAAAABBCCDDDD"))
print(solution("AABBCCDDEEABCB"))
  • defaultdict(int)를 이용해 모든 key값을 0으로 초기화
  • for문을 통해 s의 모든 원소를 돌며 sH[x]에 key와 빈도 수를
  • sHvalue값을 비교해 가장 큰 값 maxC를 찾았다면 answer에 해당 key값을 저장하고 최종적으로 return

Counter를 이용한 코드

from collections import Counter

def solution(s):
    answer = ""
    
    sH = Counter(s)

    maxC = 0

    for key in sH:
        if sH[key] > maxC:
            maxC = sH[key]
            answer = key

    return answer


print(solution("BACBACCACCBDEDE"))
print(solution("AAAAABBCCDDDD"))
print(solution("AABBCCDDEEABCB"))

  • Counter를 이용해 sHs의 문자 빈도 수를 센 Counter 객체를 반환
  • sHvalue값을 비교해 가장 큰 값 maxC를 찾았다면 answer에 해당 key값을 저장하고 최종적으로 return

profile
끄적끄적

0개의 댓글