본문 바로가기
CodingTest

SWEA - 최빈수 구하기(1204)

by 취업하고싶다! 2023. 10. 16.
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제

어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.

이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.

다음과 같은 수 분포가 있으면,

10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3

최빈수는 8이 된다.

최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).

[제약 사항]

학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.

 

 

접근방식

점수는 0~100점이므로 0으로 101개 이뤄진 ans_arr 배열 생성

학생들의 점수를 받는 scores 배열을 입력으로 받고 배열을 돌면서 ans_arr[score]에 1씩 더해줌

ex) scores = [20, 50, 39, 50, ...] 이면 ans_arr[20] += 1, ans_arr[50] += 1, ans_arr[39] += 1, ans_arr[50] += 1을 통해 각 점수들이 몇 번 나왔는지 ans_arr에 저장

배열을 다 돌고나면 ans_arr에 각 점수가 몇 번 나왔는지 저장됨

max_ans, max_index = 0으로 선언 후, ans_arr의 길이만큼 for문을 돌림

ans_arr의 값이 max_ans보다 크거나 같으면(최소한 1번은 그 점수를 맞은 학생이 있다는 뜻) max_ans 값을 ans_arr의 값으로 설정

그리고 max_index를 해당 인덱스(j)로 설정

-> 이렇게 해주면 같은 점수가 여러 개 있어도(ex: 50점 5명, 60점 5명, 90점 5명) max_index가 90이 됨(크거나 같으면이라는 조건)

 

코드

T = int(input())

for i in range(1, T+1):
    n = int(input())
    ans_arr = [0] * 101
    scores = list(map(int, input().split()))
    scores.sort()
    for score in scores:
        ans_arr[score] += 1
    # ans = ans_arr.index(max(ans_arr[::-1]))
    # print(max(ans_arr))
    # print(ans)
    max_ans = 0
    max_index = 0
    for j in range(len(ans_arr)):
        if (ans_arr[j] >= max_ans):
            max_ans = ans_arr[j]
            max_index = j
    print('#'+str(i), max_index)

'CodingTest' 카테고리의 다른 글

SWEA - 파리 퇴치(2001)  (1) 2023.10.18
SWEA - View(1206)  (1) 2023.10.16
SWEA - 지그재그 숫자(1986)  (0) 2023.10.16
SWEA - 간단한 소인수분해(1945)  (1) 2023.10.16
SWEA - 백만장자 프로젝트(1859)  (2) 2023.10.13