4834 - 숫자카드

박재현·2022년 2월 14일
0

알고리즘 부수기

목록 보기
15/43
post-thumbnail

문제 설명

정의

0부터 9사이의 값이 적혀있는 카드가 N장 있다. 중복횟수가 가장 많은 카드의 숫자와 개수를 구하여라

제한

중복횟수가 가장 많은 카드의 개수가 같다면, 숫자가 큰 값을 구한다.

입력

첫 줄에 테스트케이스의 개수가 주어지며 그 다음 줄에 카드의 총 개수가 주어진다. 그 다음줄에는 카드의 숫자가 주어진다.

3
5
49679
5
08271
10
7797946543

출력

중복횟수가 가장 많은 카드의 개수와 숫자를 출력한다.

#1 9 2
#2 8 1
#3 7 3

문제 풀이

counting sort를 사용한다.
1. 0으로 초기화된 counts 배열을 만든다.
2. i = 0 -> arr.length arr[i]의 값을 인덱스로 갖는 counts의 원소에 1을 더한다.
3. counts가 가장 큰 값을 뽑아낸다.
4. counts가 가장 큰 값이 두개 이상이면 index가 높은 값의 index와 value를 출력한다.

코드

T = int(input())

for tc in range(1, T+1):
    N = int(input())
    arr = list(map(int, input()))
    maxValue = 0
    maxIndex = 0
    counts = [0] * 10

    for i in range(N):
        counts[arr[i]] += 1

    for i, v in enumerate(counts):
        if maxValue > v:
            continue
        maxValue = v
        maxIndex = i

    print(f"#{tc} {maxIndex} {maxValue}")
profile
공동의 성장을 추구하는 개발자

0개의 댓글