본문 바로가기
🥇Problem Solving (psS2mj)/SWEA

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

by psS2mj 2020. 10. 21.
반응형

문제 링크 : swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE


나의 논리

 

점수는 0점부터 100점까지 다 나올 수 있으므로 index의 값이 곧 점수다. 따라서 index 값을 그대로 이용하면 되고, 배열의 size는 101이다.

 

우선 입력되는 수열(scores 배열)을 쭉 받은 뒤에 각 점수가 몇 번씩 나왔는지(cnt 배열) 세준다. 문제에서 요구하는 값은 cnt 배열의 원소 중 가장 큰 값의 index, 즉, 점수를 출력하는 것.

 

이 때 유의할 점은 최빈수가 여러 개일 수 있다는 것이다. 만약 이런 경우가 발생하면 문제 조건에 따라 점수가 큰 것을 출력해주면 된다.

 

사진으로 보기

# date: 2020/10/21
# author: psS2mj
# brief: SWEA_1204_[S/W 문제해결 기본] 1일차 - 최빈수 구하기 (D2)

T = int(input())
for _ in range(T):
    tc = int(input())
    scores = list(map(int,input().split()))
    cnt = [0]*101
    for i in scores:
        cnt[i] += 1

    m = max(cnt)
    print("#{} {}".format(tc,max([i for i,v in enumerate(cnt) if v == m])))

 

핵심은 scores 배열에 입력받은 값들을 쭉 돌면서 해당하는 점수가 몇 번 나왔는지 세기 위해 cnt 배열에 그 횟수를 저장한다는 것이다.

 

참고로 위 과정을 수행하는 반복문을 작성할 때는

👆🏻클릭 시 해당 문서로 이동합니다.

파이썬에서 권장하는 패턴을 지켜서 코드를 작성해보았다.


그리고 두 번째 핵심은 최빈수가 여러 개일때는 그 중 점수가 가장 큰 값을 출력해준다는 것이다.

 

m = max(cnt)
max([i for i,v in enumerate(cnt) if v == m]))

 

내 코드에서는 enumerate를 활용했다.

👆🏻클릭 시 해당 문서로 이동합니다.

 

우선, cnt 배열에서 가장 큰 원소의 값을 구한다.

 

그리고 enumerate를 활용해 반복문을 돌면서 최빈수가 여러 개일 경우(즉, v==m일 때) 그때의 index 값들이 list로 저장된다. 처음에 index가 곧 점수라고 말했지? 그러니까 방금 얻어낸 list 값 중에서 가장 큰 값을 출력해주면 끝!

반응형

댓글