CodingTest

SWEA - 최빈수 구하기(1204)

취업하고싶다! 2023. 10. 16. 21:13
 

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