Programming/SWEA

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

토토모에요 2021. 7. 31. 13:37
728x90
반응형

SW Expert Academy에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.

https://swexpertacademy.com/main/main.do

문제 : 0에서 9까지 숫자가 적힌 N장의 카드가 주어진다.
가장 많은 카드에 적힌 숫자와 카드가 몇 장인지 출력하는 프로그램을 만드시오. 카드 장수가 같을 때는 적힌 숫자가 큰 쪽을 출력한다.

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다.  ( 1 ≤ T ≤ 50 )
다음 줄부터 테스트케이스의 첫 줄에 카드 장수 N이 주어진다. ( 5 ≤ N ≤ 100 )
다음 줄에 N개의 숫자 ai가 여백없이 주어진다. (0으로 시작할 수도 있다.)  ( 0 ≤ ai ≤ 9 ) 

[출력]

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

input

3
5
49679
5
08271
10
7797946543

output

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

code

Test_case=int(input())

for i in range(1,Test_case+1):
    Card_N=int(input())
    Card_numbers=str(input()) #따로 따로 분리하기 위해 숫자를 문자열로 입력받는다.


    dictionary = {}
    for k in Card_numbers:
        if k not in dictionary:
            dictionary[k]=1
        else:
            dictionary[k]=dictionary[k]+1

    def function(x):
        return dictionary[x]

    key_max=max(dictionary.keys(),key=function)


    if key_max=="0":
        a=list(dictionary.keys())
        a_new_list=[]
        for j in a:
            a_new_list.append(int(j))


        print("#%d %s %s" %(i,max(a_new_list),dictionary[key_max]))
    else:
        print("#%d %s %s" %(i,key_max,dictionary[key_max])) 

먼저 카드들의 숫자들을 문자화 시켜서 딕셔너리에 각 카드 숫자들의 개수들을 카운팅했습니다.
그 후에 딕셔너리의 최대값인 key_max변수를 생성해주고 카드 장수가 같은 경우인 key_max가 "0"인 경우를 만들어 주어 숫자가 큰 쪽을 출력하게 해주었고 카드 장수가 다르면 가장 많이 나온 카드의 숫자와 그 숫자의 장수를 출력해주는 코드를 짰습니다.
코드는 길지만 비교적 간단하게 문제를 해결할 수 있었습니다.

반응형