본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(코딩테스트 입문) : 등수 매기기

반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120882

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 정답 변수 answer선언 후 score만큼 방을 만들어 각 원소를 0으로 초기화합니다.

 

2. 배열의 index와 평균값을 저장할 idx_avg_dict선언 후 빈 객체로 초기화합니다.

📔 풀이과정

1. score에 대해 for loop를 수행하며 index별 평균값을 idx_avg_dict에 key, value로 각각 저장해줍니다.

 

2. 평균값을 tuple내 key로 사용해 내림차순으로 정렬해줍니다.

 

3. rank, 이전 평균값 prev_avg, 같은 rank 수 same_cnt선언 후 각각 1, -1, 0으로 초기화합니다.

 

4. idx_avg_dict에 대해 loop를 수행하며 다음을 진행합니다.  4-1. 이전 평균값이 현재 평균값과 같다면 same_cnt를 1증가시켜줍니다.  4-2. 다르다면 prev_avg값을 현재 평균값으로 갱신하며 rank에 same_cnt값을 더해 공동 랭킹을 구해줍니다.  4-3. 갱신된 rank값을 answer의 idx번째에 저장해줍니다.

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

def solution(score):
    answer = [0] * len(score)
    idx_avg_dict = {}
    
    for i, s in enumerate(score):
        s = score[i]
        avg = (s[0] + s[1]) / 2
        idx_avg_dict[i] = avg
    idx_avg_dict = dict(sorted(idx_avg_dict.items(), key = lambda item: item[1], reverse=True))
    
    rank = 1
    prev_avg = -1
    same_cnt = 0
    for idx, avg in idx_avg_dict.items():
        if prev_avg == avg:
            same_cnt += 1
        else:
            prev_avg = avg
            rank += same_cnt
            same_cnt = 1
        answer[idx] = rank
    return answer

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.