[알고리즘] 프로그래머스 - 2주차_상호평가

June·2021년 9월 8일
0

알고리즘

목록 보기
251/260

프로그래머스 - 2주차_상호평가

내 풀이

from collections import Counter

def solution(scores):
    answer = ''
    average_scores = []

    for j in range(len(scores[0])):
        score_list = []
        self_score = 0
        for i in range(len(scores)):
            score_list.append(scores[i][j])
            if i == j:
                self_score = scores[i][j]

        score_counter = Counter(score_list)
        if self_score == min(score_list) or self_score == max(score_list):
            if score_counter.get(self_score) == 1:
                score_list.remove(self_score)

        average_scores.append(sum(score_list) / len(score_list))

    for grade in average_scores:
        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

Counter를 이제 문제풀 때 필요하면 사용하자.

다른 사람 풀이

def solution(scores) :

    avgs=[]

    score=[ [i[j] for i in scores] for j in range(len(scores))]

    for idx,i in enumerate(score) :

        avg=sum(i) ; length=len(i)

        if i[idx] == max(i) or i[idx] == min(i) :

            if i.count(i[idx]) == 1 :

                avg-=i[idx] ; length-=1

        avgs.append(avg/length)

    return "".join([ avg>=90 and "A" or avg>=80 and "B" or avg>=70 and "C" or avg>=50 and "D" or "F" for avg in avgs ])

numpy를 사용하지 않고 행열 뒤집는 방법

하지만 위의 코드는 정사각행렬일 때만 작동한다.
2차언 배열을 *(asterik)로 unpacking한 후 다시 zip으로 묶으면 transpose가 된다.

list(zip(*relation))

이 코드는 정사각행렬이 아니여도 작동한다. 하지만 내부가 튜블이 된다는단점이 있기는하다.

내부 동작 순서를 보자면 이렇다.

    print(*relation)
    print(list(zip(*relation)))
['100', 'ryan', 'music', '2'] ['200', 'apeach', 'math', '2'] ['300', 'tube', 'computer', '3'] ['400', 'con', 'computer', '4'] ['500', 'muzi', 'music', '3'] ['600', 'apeach', 'music', '2']
[('100', '200', '300', '400', '500', '600'), ('ryan', 'apeach', 'tube', 'con', 'muzi', 'apeach'), ('music', 'math', 'computer', 'computer', 'music', 'music'), ('2', '2', '3', '4', '3', '2')]

우선 2차원 배열을 제일 밖의 배열을 없애서 쭉 나열하고, zip을 사용하니 각 배열에서 하나씩 가져와서 새로 묶는 것이다.

0개의 댓글