[SWEA] 1204 최빈수 구하기

[SWEA] 1204 최빈수 구하기

문제 링크

두 가지로 풀이해보았다.

  • Counter 라이브러리 사용
  • Counter 함수 구현

Counter 라이브러리 사용 풀이

from collections import Counter
t = int(input())

for i in range(t):
    t_num = int(input())
    array = list(map(int, input().split()))
    print(f"#{t_num}",Counter(array).most_common()[0][0])
  • Counter(list) : list 내 데이터의 빈도 수를 계산해서 순서쌍 형식으로 반환한다.

[(71, 17), (22, 16), (41, 15), (67, 15), (13, 15), (32, 15), (34, 15), (21, 15), (4, 15), (1, 15)...]

list에 71이 17개, 22가 16개 … 이런 식으로

  • 최빈값부터 정렬되게 하기 위해서는 most_common() 메서드를 사용하면 된다.

Counter 함수 구현

def counter(arr):
    _dict = {}
    for v in arr:
        _dict.setdefault(v, 0)
        _dict[v] += 1
    return _dict

for tc in range(1, int(input())+1):
    tc_num = int(input())
    scores = list(map(int, input().split()))
    counted_scores = counter(scores)

    sorted_num = sorted(counted_scores.items(), key=lambda item:item[1], reverse=True)
    print(f"#{tc}", sorted_num[0][0])

라이브러리가 사용이 불가능한 대비하기 위해서 counter함수를 만들어봤다.

setdefault를 이용해서 키 값이 있다면 키 값을 반환하고 없다면 두 번째 인자의 값을 반환할 수 있다.

그리고 각 값을 count up 해서 값으로 저장해주면 된다.


© 2021. All rights reserved.