1204

HoRi·2022년 7월 20일
0

SWEA_PY

목록 보기
20/32

1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기

어느 고등학교에서 실시한 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함수를 사용해서 테스트 케이스와 최빈값에 해당하는 점수를 출력   



모든 출처는 SW Expert 아카데미에 있습니다.

해당 글은 영리적 목적이 아닌 학습의 기록으로 사용되었습니다. 오기나 잘못된 부분은 말씀해주시면 수정하겠습니다.

profile
무지성 작성소

0개의 댓글