티스토리 뷰

 

 

SW Expert Academy

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

swexpertacademy.com


1. 문제 내용

 

 

2. 접근 방식

점수 종류가 101개이고 입력된 점수 데이터가 1,000개이다. 따라서 최악의 경우라도, 점수 종류 for문 안에서 특정 점수를 count하는 연산을 적용하여도 약 100,000번의 연산만 수행하면 된다.

 

입력된 점수 데이터의 중복을 없애 점수의 종류로 for문을 돌린다. 각 점수의 빈도수를 파악한 후 딕셔너리에 넣는다. 이때 딕셔너리의 key는 빈도수, value는 점수이다.

만약 딕셔너리에 동일한 빈도수(key)가 존재한다면, 점수가 더 큰 값이 value로 저장되도록 한다.

 

이후 딕셔너리에서 가장 큰 key 값의 value를 출력한다.

 

 

3. 정답 코드

  • 집합을 사용하여 점수 종류의 중복 제거 ex) [ 8, 5, 5, 10 ]을 { 8, 5, 10 }으로 변경
  • 딕셔너리 이용 ex) { 빈도수: 점수 }
T = int(input())

for test_case in range(1, T + 1):
    case = int(input())
    data = list(map(int, input().split()))
    
    count = dict()
    for score in set(data) :
        key = data.count(score)
        
        if key in count :
            count[key] = max(count[key], score)
        else :
            count[key] = score
    
    print(f'#{case} {count[ max(count) ]}')
728x90