Algorithm

SWEA 4834 숫자카드 (python)

광보기 2021. 4. 19. 14:52
반응형

4834. [파이썬 S/W 문제해결 기본] 1일차 - 숫자 카드 D2

문제

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

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

[입력]

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

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

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

[출력]

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

풀이

import sys
sys.stdin = open("input.txt")

T = int(input())

def max_card(N,numbers):

    # 버블 소트 정렬
    for i in range(len(numbers) - 1, 0, -1):
        for j in range(0, i):
            if numbers[j] > numbers[j + 1]:
                numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]

    # 맥스값 초기화
    max_count = 0
    max_number = numbers[0]
    for number in numbers:
        # 카운트 초기화
        count = 0
        for i in range(len(numbers)):
            if numbers[i] == number:
                count += 1
        # 버블소트로 인해 같을 경우 자동으로 더 큰 값이 적용
        if count>=max_count:
            max_count = count
            max_number = number

    return max_number, max_count


for tc in range(1, T+1):
    # 카드장수 N
    N = int(input())
    # 카드 숫자 리스트
    numbers = list(map(int,input()))
    result = max_card(N, numbers)

    print("#{} {} {}".format(tc,result[0],result[1] ))

반응형