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/