[SWEA] 4834 숫자카드

문제 출처 : [SWEA] 4834 숫자카드
learn -> course -> programming intermediate -> list1 -> 숫자카드

문제

0에서 9까지 숫자가 적힌 N장의 카드가 주어진다.

가장 많은 카드에 적힌 숫자와 카드가 몇 장인지 출력하는 프로그램을 만드시오. 카드 장수가 같을 때는 적힌 숫자가 큰 쪽을 출력한다.

입력

첫 줄에 테스트 케이스 개수 T가 주어진다. ( 1 ≤ T ≤ 50 )

다음 줄부터 테스트케이스의 첫 줄에 카드 장수 N이 주어진다. ( 5 ≤ N ≤ 100 )

다음 줄에 N개의 숫자 ai가 여백없이 주어진다. (0으로 시작할 수도 있다.) ( 0 ≤ ai ≤ 9 )

출력

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 가장 많은 카드의 숫자와 장 수를 차례로 출력한다.

코드

T = int(input())

for tc in range(1, T + 1):
    # N : 카드의 개수
    # cards : 주어진 카드를 문자열 리스트로 받아옴
    # sort_cards : 중복된 카드의 수를 찾기 위한 리스트
    N = int(input())
    cards = list(map(int, input()))
    card_cnt = [0] * 10

    # 카드의 개수 만큼 반복하면서 주어진 카드의 i번째 수를 정수로 변환하고 해당 숫자의 인덱스 위치에 1을 더함
    for i in range(N):
        card_cnt[cards[i]] += 1

    # max_cnt : 최대 중복값을 구하기 위한 변수를 0으로 초기화
    max_cnt = 0
    # 카드 중복 횟수를 저장한 리스트의 길이만큼 반복하면서 해당 리스트의 최댓값을 구함
    for j in range(len(card_cnt)):
        if max_cnt <= card_cnt[j]:      # 만약 값이 같을 경우에는 뒤에 나오는 숫자로 값이 대체됨
            max_cnt = card_cnt[j]
            result = j          # result : 해당 중복값을 가진 수를 구하기 위한 변수

    print('#{} {} {}'.format(tc, result, max_cnt))


풀이 방법

리스트의 인덱스를 활용하여 카드 번호와 같은 인덱스 위치에 1씩 더해주는 방식으로 문제를 풀었다. 그리고 마지막에는 반복문과 if문을 활용하여 리스트의 최대값을 구해주었다.

좋은 웹페이지 즐겨찾기