SWE(4834)_숫자카드

SWE 4834 숫자카드

0에서 9까지 숫자가 적힌 N장의 카드 가장 많은 카드에 적힌 숫자와 카드가 몇장인지 출력하는 프로그램 카드 장수가 같을 때는, 적힌 숫자가 큰 쪽을 출력

아이디어

cardList = [0]*10로 비어있는 리스트 선언한 뒤, 해당 번호가 나온 횟수를 리스트에 추가해주고 최대값의 index를 찾는다

문제 -> 이렇게 되면, 횟수가 중복일 때, 가장 앞에 있는 번호가 출력된다. 예를 들어 5, 22991 이라고 하면 2가 출력된다. 그래서 리스트에 reverse 함수를 적용한 뒤 최대값을 찾고, 9에서 그 값의 인덱스를 빼줬다.

T = int(input())
cardList = [0]*10

for i in range(T):
    cardList = [0]*10
    cnt = int(input())
    num = int(input())
    for j in range(cnt):
        cardList[num % 10] += 1
        num //= 10
    cardList.reverse()
    maxR = max(cardList)
    maxI = 9-cardList.index(maxR)
    print("#%s %d %d" % (i+1, maxI, maxR))


알게된 사실

리스트에서 최대값 찾기 : max(list) 리스트에서 최대값의 index 찾기 : list.index(maxinum value)

그리고 SWE에 제출하려면 표준 입출력만을 사용하라고 한다. sys.stdin.readline() 사용이 불가능하다.

Q)reverse를 쓰지 않고, for문을 역순을 돌았다면 reverse할 필요가 없었을까? 계산해보자 -> 안됌 (무조건 리스트의 앞에 있는게 먼저 나오는 것 같다. reverse를 쓰고 싶지 않다면, for문을 돌면서, 값이 같은 것이 나왔을 때, 인덱스가 큰 값을 더 큰 값으로 계산하면 되겠다.


참고자료

[1931 문제 해결방안 블로그]https://daimhada.tistory.com/38 [sys.stdin.readline()]https://dailyheumsi.tistory.com/32 [lambda 함수]https://victorydntmd.tistory.com/239 [sorted 함수]http://cigiko.cafe24.com/python-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-sort%EC%99%80-sorted/

0%