Today
Total
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 2주차_상호 평가 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 2주차_상호 평가 - Python

ukunV 2021. 9. 3. 22:45

Link

 

코딩테스트 연습 - 2주차

[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD"

programmers.co.kr

 

Solution

필자는 다른 풀이에 비해 투박한 방법으로 행렬을 변환했지만 아래 다른 풀이들의 변환 방법을 익혀두기 바란다.

def solution(scores):
    answer = []

    s = []
    for i in range(len(scores)):
        t = []
        for j in range(len(scores)):
            t.append(scores[j][i])
        s.append(t)

    for i in range(len(s)):
        if s[i][i] == max(s[i]) or s[i][i] == min(s[i]):
            if s[i].count(s[i][i]) == 1:
                s[i].remove(s[i][i])


    for i in range(len(s)):
        t = sum(s[i]) / len(s[i])

        if t >= 90:
            t = 'A'
        elif t >= 80:
            t = 'B'
        elif t >= 70:
            t = 'C'
        elif t >= 50:
            t = 'D'
        else:
            t = 'F'

        answer.append(t)

    return ''.join(answer)
📌 Tip: list(map(list, zip(*scores)))

 

Other Solution

from collections import Counter

def solution(scores):
    answer = ''

    for idx, score in enumerate(list(map(list, zip(*scores)))):
        length = len(score)
        if Counter(score)[score[idx]] == 1 and (max(score) == score[idx] or min(score) == score[idx]):
            del score[idx]
            length -= 1

        grade = sum(score) / length

        if grade >= 90:
            answer += 'A'
        elif grade >= 80:
            answer += 'B'
        elif grade >= 70:
            answer += 'C'
        elif grade >= 50:
            answer += 'D'
        else:
            answer += 'F'

    return answer
def solution(scores):
    answer = ''

    for i, score in enumerate(zip(*scores)):
        avg = (sum(score) - score[i]) / (len(score) - 1) if score[i] in (min(score), max(score)) and score.count(score[i]) == 1 else sum(score) / len(score)
        answer += "%s" % (
            "A" if 90 <= avg else
            "B" if 80 <= avg else
            "C" if 70 <= avg else
            "D" if 50 <= avg else
            "F"
        )

    return answer
Comments