[SWEA-D2]1204. 최빈수 구하기 - python

syeony·2024년 9월 25일
0

python

목록 보기
13/13

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1&&&&&&&&&&

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

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

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

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

최빈수는 8이 된다.

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

[제약 사항]

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

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.

내 풀이

import sys

T = int(sys.stdin.readline())

for test_case in range(1, T + 1):
    N = int(sys.stdin.readline())
    arr = list(map(int, sys.stdin.readline().split()))
    
    list = [0] * 101
    for i in arr:
        list[i] += 1
    
    print(f"#{N} {list.index(max(list))}")
        

ㅋㅋ...진짜 이것도 어렵다...
D2인데...ㅠㅠ
맨 마지막 최빈수값이 두개일때 케이스를 처리해야하는데 막혀서 1시간넘게 낑낑대다 검색ㅋㅋ

다른 사람 풀이

for i in range(1, int(input()) + 1):
    _ = input()  # 테스트케이스 번호
    grades = list(map(int, input().split()))  #점수
    freq = [0] * 101  #0~100점까지의 빈도를 구하기 위함
    mode = 0  #최빈값
    for grade in grades:
        freq[grade] += 1 #현재점수의 빈도상승
        if freq[grade] >= freq[mode]: mode = grade #현재점수 빈도가가 최빈값 이상이면 최빈수 변경
    print(f"#{i} {mode}")

변수명을 저렇게 신경써서 적으니 훨씬 보기 좋다는 것을 깨달았다.
최빈수 알고리즘을 그냥 외워놓자.

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글