프로그래머스 등수 매기기

Apic·2023년 2월 10일
0

프로그래머스

목록 보기
42/162

💡문제 설명

영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score
가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.


🚫제한사항

  • 0 ≤ score
    [0], score
    [1] ≤ 100
  • 1 ≤ score
    의 길이 ≤ 10
  • score
    의 원소 길이는 2입니다.
  • score
    는 중복된 원소를 갖지 않습니다.

🔢입출력 예

scoreresult
[[80, 70], [90, 50], [40, 70], [50, 80]][1, 2, 4, 3]
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]][4, 4, 6, 2, 2, 1, 7]

🔍입출력 예 설명

입출력 예 #1

  • 평균은 각각 75, 70, 55, 65 이므로 등수를 매겨 [1, 2, 4, 3]을 return합니다.

입출력 예 #2

  • 평균은 각각 75, 75, 40, 95, 95, 100, 20 이므로 [4, 4, 6, 2, 2, 1, 7] 을 return합니다.
  • 공동 2등이 두 명, 공동 4등이 2명 이므로 3등과 5등은 없습니다.

💻코드

def solution(score):
    rank = 0
    avg = []
    dict = []
    for i in score:
        avg.append(sum(i)/2)
        dict.append([sum(i)/2, 1])
        
    ascend = sorted(avg)
    ascend_dict = []
    cnt = 1
    a = 0
    
    for i in range(len(ascend)-1, -1, -1):
        i += a
        if i < 0:
            break
        elif i == 0:
            ascend_dict.append([ascend[i], cnt])
        else:
            ascend_dict.append([ascend[i], cnt])
            k = 0
            for j in range(i, -1, -1):
                if j == 0:
                    break
                elif ascend[j] == ascend[j-1]:
                    ascend_dict.append([ascend[j-1], cnt])
                    a -= 1
                    k += 1
                else:
                    break
            cnt += k        
        cnt += 1
    
    
    i = 0
    for avg1, rank1 in dict:
        for avg2, rank2 in ascend_dict:
            if avg1 == avg2:
                # print(dict[i])
                
                dict[i][1] = rank2
        i += 1
        
        
    rank = [j for i, j in dict]
    ### print(dict)
    return rank

https://school.programmers.co.kr/learn/courses/30/lessons/120882?language=python3

profile
코딩 공부하는 사람

0개의 댓글