위클리 챌린지 - 2주차 - 상호평가

1. 상호평가

A. 📜 문제

위 프로그래머스 사이트에 접속하여 문제를 확인해주세요.

B. 💡 내 답안

a. 😊 1차 시도 (성공)

def solution(scores):
    arrays = []
    
    for i in zip(*scores):
        arrays.append(i)
        
    # print(array)
    answers = []
    
    for i in range(len(arrays)):
        me = arrays[i][i]
        max_array = max(arrays[i])
        min_array = min(arrays[i])
        
        temp = sum(arrays[i])
        temp_len = len(arrays[i])
        
        if (me == max_array and arrays[i].count(me) == 1) or         (me == min_array and arrays[i].count(me) == 1):
            temp -= me
            temp_len -= 1
        
        answers.append(temp/temp_len)
    # print(answers)
    grade = ''
    
    for answer in answers:
        if 90 <= answer:
            grade += 'A'
        elif 80 <= answer < 90:
            grade += 'B'
        elif 70 <= answer < 80:
            grade += 'C'
        elif 50 <= answer < 70:
            grade += 'D'
        elif answer < 50:
            grade += 'F'
    
    return grade

a. 🙄 회고

내 풀이

  • 열을 비교해야하는 것을 대각선을 기준으로 행렬을 교환하는 전치행렬을 사용해서 풀었다.

반성

  • zip 함수를 완벽하게 쓸줄 아는게 아닌 것 같다.

결론

  • 이런 문제는 크레인 문제가 있으니 그런 것들을 풀어보자.

C. 🧐 문제 해설

이해한 내용을 바탕으로 작성했습니다.

이런 전치 연산은 zip(*value)을 사용하면 편하게 해결할 수 있다.

그리고 평균을 구할 때, 자기 자신이 평가한 점수가 유일한 최소 혹은 최대 점수가 되는 경우에만 자기 점수를 제외하고 평균을 구한다.

참고문헌

위클리 챌린지. 코딩테스트 연습 - 2주차_상호평가 | 프로그래머스 (programmers.co.kr). Programmers. (accessed Oct 11, 2021)

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.