어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만드려고 한다.
이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.
다음과 같은 수 분포가 있으면,
10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3
최빈수는 8이 된다.
최빈수를 출력하는 프로그램을 작성하여라.(단, 최빈수가 여러 개 일 때는 가장 큰 점수를 출력하라)
학생 수는 1000명이며, 각 학생의 점수는 0점 이상, 100점 이하의 값이다.
첫 번째 줄에는 테스트 케이스 T가 주어진다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.
'#'부호와 함께 테스트 케이스 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.
T = int(input()) # 입력 받은 값을 정수형으로 변환해서 T에 저장
for i in range(1, T+1): # 1부터 T+1까지 1씩 증가하는 반복문
n = int(input()) # 입력 받은 값을 정수형으로 변환해서 n에 저장
grade = list(map(int, input().split()))
# 1000명의 점수를 입력 받을 변수 grade
# 빈 칸을 기준으로 나누어서 값을 입력 받아 정수형으로 변환한 값들을 list로 해서 grade에 저장
cnt = [0] * 101 # 0의 값 101개를 가지는 리스트 생성
for j in grade: # grade라는 list안에서 요소를 꺼내서 j에 저장하고, 꺼낼 때마다 아래 코드를 반복
cnt[j] += 1 # 점수는 0점부터 100점까지 있기 때문에 grade에서 꺼내온 요소를
# cnt list의 인덱스로 사용해서 그 인덱스에 1을 더해줌
max = 0 # 변수 max를 0으로 초기화(최빈값)
for k in range(0, len(cnt)): # 0부터 cnt의 길이까지 1씩 증가하는 반복문
if(max <= cnt[k]): # 최빈값 변수인 max에 저장되어 있는 값보다 cnt 값이 크거나 같을 경우
# cnt은 grade에서 나온 점수들을 카운팅한 list
max = cnt[k] # 새로운 최빈값으로 갱신하기 위해서 max에 cnt[k]를 넣음
score = k # 새로운 최빈값이 갱신됐을 때 K값을 score에 저장
# 이때 k값이 최빈값에 해당하는 점수가 됨
# ex) 10, 9, 8, 8, 8, 5, 6, 3, 5, 7인 리스트가 있다고 했을 때, 최빈값은 8로 위의 코딩에 반영한다면 cnt[8] = 3일 것
# 이 때, 최빈값(max)은 3, 최빈값에 해당하는 점수(score)는 8이다
print('#{} {}'.format(i, score)) # format함수를 사용해서 테스트 케이스와 최빈값에 해당하는 점수를 출력