티스토리 뷰

 

SW Expert Academy

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

swexpertacademy.com


1. 문제 내용

 

 

2. 접근 방식

  • 각 총점을 구한 후, k번째 학생의 총점을 저장한다.
  • 그 총점을 내림차순 정렬한 후, k번째 학생의 점수 순위를 저장한다.
  • 각 평점에 속할 수 있는 순위의 경계값을 구한 후, k번째 학생이 몇 번째 경계값에 속하는지 구한다.
  • k번째 학생이 속한 경계값이 곧 k번째 학생의 평점이다.

뭔가 더 깔끔하고 명확한 코드를 작성할 수 있을 듯한데, 아쉽다. 나중에 다시 보면 번뜩 또 다른 아이디어가 떠오르길 기대한다.

 

3. 정답 코드

def make_list_with_total(n) :
    data = []
    for i in range(1, n + 1) :
        mid, final, hw = map(int, input().split())
        data.append(mid * 0.35 + final * 0.45 + hw * 0.2)
    return data
        
T = int(input())

for test_case in range(1, T + 1):
    n, k = map(int, input().split())
    
    data = make_list_with_total(n)
    sorted_data = sorted(data, reverse=True)

    score_of_k = data[k-1]
    rank = sorted_data.index(score_of_k) + 1
    
    grades = [ 'A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0' ]
    
    amount = n // 10
    boundaries = [ amount * i for i in range(1, 11) ]

    for index, boundary in enumerate(boundaries) :
        if rank <= boundary :
            print(f'#{test_case} {grades[index]}')
            break
728x90