맛있는물회

[맛있는물회] <SWEA알고리즘> 4834번 "숫자 카드" 본문

IT/알고리즘

[맛있는물회] <SWEA알고리즘> 4834번 "숫자 카드"

맛있는물회 2020. 3. 31. 01:47

문제 조건

 



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

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

 

Input


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

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

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

 

Output


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

 

생각한 아이디어


빈도 수를 Count 하는 하나의 List를 만든다. 처음에 당황했던 것이 파이썬 문법을 잘 몰라서 단순하게 공백없는 문자열을 입력받고 10으로 나눠가며 나머지에 해당하는 Index 를 Count 하고 N //= 10 으로 몫만 살려서 진행했다.

그런데 두번째 인풋에는 첫번째 자리수가 0이었다. 그래서 계산이 되지 않았다.

그래서 방식을 바꾸었다. 문자열로 입력을 받고 문자열도 다른 언어와 마찬가지로 List 의 Index를 가지고 있다는 것을 알게 되었고 Index를 하나씩 올려가며 Int 로 형변환 한 뒤 접근을 하였다. 

그렇게 푸니 아주 쉽게 풀렸다.

 

소스코드

T = int(input())
for TC in range(1, T+1):
    num = int(input())
    N = str(input())
    cnt = []
    for i in range(10):
        cnt.append(0)

    for i in range(num):
        cnt[int(N[i])] += 1

    max = -1
    for i in range(10):
        if cnt[i] >= max:
            ans = i
            max = cnt[i]
    print("#%d %d %d" %(TC, ans, cnt[ans]))

 

*파이썬 문법 정리

- / 연산은 정수를 연산하더라도 소수점이 남는다. // 연산을 진행하면 나머지는 버리고 몫만 남게된다.

- 문자열이 어떻게 처리되는지는 모르겠지만 일반적으로 C에서 진행되는 것 처럼 배열의 인덱스를 가지게 된다. 즉, N = str(input()) 으로 받으면 N[0] ~ N[len(N)] (맞나?) 로 진행하면 된다.

- List 를 만들고 초기화를 하고 싶으면 Array.append(0)을 for문을 돌려 진행하면 된다. 다른 더 좋은 방법이 있는 것 같던데 찾아 봐야겠다.

- 파이썬은 print 하는 형식이 조금 다르다. ( ) 안에 , 가 없으며 넣고 싶은 형식을 뒤에 %(~,~,~) 이런식으로 진행한다.

Comments