본문 바로가기
CodingTest

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

by 취업하고싶다! 2023. 10. 19.
 

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