본문 바로가기

알고리즘/SW Expert Academy

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

728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PwGK6AcIDFAUq&categoryId=AV5PwGK6AcIDFAUq&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=PYTHON&select-1=2&pageSize=10&pageIndex=2 

 

SW Expert Academy

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

swexpertacademy.com

문제 접근

  • 학생들의 중간고사, 기말고사, 과제점수가 주어졌을 때 k번째 학생의 학점을 구하는 문제
  • 시뮬레이션 문제로 접근하여 아래와 같은 로직으로 구현함

구현 과정

  1. 문제 조건에 따른 학생별 평점 저장(몇번째 학생인지를 저장하기 위해 배열+튜플 활용)
  2. 평점을 기준으로 내림차순 정렬
  3. N/10을 기준으로 k번째 학생의 순위를 판별
  4. 순위에 따른 학점 출력

정답 코드

test = int(input())
credit = {0:'A+', 1:'A0', 2:'A-', 3:'B+', 4:'B0', 5:'B-', 6:'C+', 7:'C0', 8:'C-', 9:'D0'}
for t in range(test):
    n, k = map(int, input().split())
    
    score = []
    for i in range(1, n+1):
        first, second, assign = map(int, input().split())
        # 학생별 성적 저장    
        num = first * (35 /100) + second * (45 /100) + assign * (20 / 100)
        score.append((i, num))

    # 성적순 내림차순 정렬
    sorted_score = sorted(score, key=lambda x: x[1], reverse=True)
   
    # 성적을 나누는 기준
    standard = n // 10
    # k번째 학생 찾기
    for index, element in enumerate(sorted_score):
        if element[0] == k:
            # k 번째 학생의 순위
            number = index // standard
       
            break
    print(f'#{t+1}', credit[number])