CodingTest

SWEA - 조교의 성적 매기기(1983)

취업하고싶다! 2023. 10. 19. 18:37
 

SW Expert Academy

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

swexpertacademy.com

 

문제

학기가 끝나고, 학생들의 점수로 학점을 계산중이다.

학점은 상대평가로 주어지는데, 총 10개의 평점이 있다.


학점은 학생들이 응시한 중간/기말고사 점수 결과 및 과제 점수가 반영한다.

각각 아래 비율로 반영된다.


10 개의 평점을 총점이 높은 순서대로 부여하는데,

각각의 평점은 같은 비율로 부여할 수 있다.

예를 들어, N 명의 학생이 있을 경우 N/10 명의 학생들에게 동일한 평점을 부여할 수 있다.

입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어지고,

학점을 알고싶은 K 번째 학생의 번호가 주어졌을 때,

K 번째 학생의 학점을 출력하는 프로그램을 작성하라.


[제약사항]

1. N은 항상 10의 배수이며, 10이상 100이하의 정수이다. (10 ≤ N ≤ 100)

2. K는 1 이상 N 이하의 정수이다. (1 ≤ K ≤ N)

3. K 번째 학생의 총점과 다른 학생의 총점이 동일한 경우는 입력으로 주어지지 않는다.

 

 

접근 방식

grades 배열에 학점 나열

학생 수 N명과 K번 째 학생을 입력받고, avg_arr = []로 선언

학생 수가 N명이므로 for문을 N번 돌면서 중간, 기말, 과제 점수를 scores에 리스트로 받음

중간이 35%, 기말이 45%, 과제가 20%이므로 avg_arr에 각각 퍼센테이지를 곱한 값을 더해줌

 

K번째 학생이 무슨 학점인지 알아내야하는문제이므로 k번째 학생의 점수를 kth_score에서 받아줌

avg_arr에 순서대로 학생들의 평균이 입력되어있는데 학점을 높은 순서대로 나열했으므로(A+, A0, A-, ...) avg_arr를 값이 높은 순서대로 나열해줌

 

그리고 가장 해결하는 데 오래걸렸던 부분(학생 수가 10명이면 각 학점에 1명씩, 20명이면 각 학점에 2명씩 들어가는 부분)인데, div라는 변수를 선언하고 N // 10으로 선언해줌(ex: N = 30이면 div = 30 // 10 = 3)

그리고 avg_arr.index(kth_score)를 통해 정렬한 avg_arr에서 K번째 학생의 점수값을 index로 넣어서 K번째 학생의 점수가 내림차순으로 정렬했을 때 몇 번째에 해당하는지 확인하고 그 값을 div로 나눠줌(학생이 30명이고 K번째 학생의 평균점수가 90이고 내림차순으로 정렬했을 때 avg_arr의 4번째에 있으면 avg_arr.index(kth_score) // div = 4 // 3 = 1이 됨. 이 값을 kth_grade에 할당해주고 grades[kth_score]하면 grades[1]이 되므로 A0가 나옴. 30명 중 4등이므로 3등까지 A+, 4~6등은 A0를 받음)

 

코드

T = int(input())
grades = ['A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0']
for i in range(1, T+1):
    N, K = map(int, input().split())
    avg_arr = []
    for _ in range(N):
        scores = list(map(int, input().split()))
        avg_arr.append(scores[0] * 0.35 + scores[1] * 0.45 + scores[2] * 0.2)
    kth_score = avg_arr[K-1]
    avg_arr.sort(reverse=True)
    
    div = N // 10
    kth_grade = avg_arr.index(kth_score) // div
    
    print('#'+str(i), grades[kth_grade])

'CodingTest' 카테고리의 다른 글

SWEA - 지그재그 숫자(1986)  (0) 2023.10.19
SWEA - 간단한 369게임(1926)  (1) 2023.10.19
SWEA - 파리 퇴치(2001)  (1) 2023.10.18
SWEA - View(1206)  (1) 2023.10.16
SWEA - 최빈수 구하기(1204)  (0) 2023.10.16