[Lv1] 상호평가

이말감·2021년 9월 11일
0

Programmers

목록 보기
6/32

프로그래머스 Lv1 상호평가

문제

링크

  • 제한사항
    2 ≤ scores의 행의 길이(학생 수) ≤ 10
    scores의 열의 길이 = scores의 행의 길이
    즉, scores는 행과 열의 길이가 같은 2차원 배열입니다.
    0 ≤ scores의 원소 ≤ 100
    return 값 형식
    0번 학생의 학점부터 차례대로 이어 붙인 하나의 문자열을 return 합니다.

풀이

def grade(aver) :
    if aver >= 90 :
        return 'A'
    elif aver >= 80 :
        return 'B'
    elif aver >= 70 :
        return 'C'
    elif aver >= 50 :
        return 'D'
    else :
        return 'F'
        
        
def solution(scores):
    arr = []
    answer = ''
    for i in range(len(scores)) :
        point = []
        myPoint = 0
        for j in range(len(scores[i])) :
            point.append(scores[j][i])
            if i == j :
                myPoint = scores[j][i]
        if max(point) == myPoint or min(point) == myPoint :
            if point.count(myPoint) == 1 :
                up = sum(point) - myPoint
                down = len(point)-1
                arr.append(grade(up/down))
                continue
    
        arr.append(grade(sum(point)/len(point)))
    for k in range(len(arr)) :
        answer += arr[k]
    return answer
  1. 일단 본인의 점수 리스트에서 본인이 매긴 점수가 최대, 최소일 때 뺀다고 했으므로 모든 점수를 point 리스트에 넣고 내 점수를 myPoint라는 변수에 넣었다.
  2. 내 점수가 최대, 최소 점수일 때, 그 점수가 하나만 있을 때 그 점수를 빼고 평균을 구한다.
    그게 아니라면 그냥 평균을 구한다. 구한 평균을 학점으로 바꿔주는 함수인 grade()에 넣어 바꾸고 평균 배열에 넣는다.
  3. 배열을 하나의 문자열로 만들어 return 한다.
  • 고친 풀이
def solution(scores):
    answer = []
    avgList = 'FFFFFDDCBA'
    scores = list(map(list, zip(*scores)))
    for s in range(len(scores)) :
        avg = 0
        if max(scores[s]) == scores[s][s] or min(scores[s]) == scores[s][s] :
            if scores[s].count(scores[s][s]) == 1:
                avg = (sum(scores[s])-scores[s][s])/(len(scores)-1)
            else :
                avg = sum(scores[s])/len(scores[s])
        else :
            avg = sum(scores[s])/len(scores[s])
        answer.append(avgList[int(avg) // 10])
    return "".join(answer)
  1. scores = list(map(list, zip(*scores)))
    링크 : 이차원리스트뒤집기

zip을 이용해서 이차원 리스트를 뒤집을 수 있다.
zip(*iterables)는 각 iterables 의 요소들을 모으는 이터레이터를 만든다.

ex)

mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
    print (i)
(1, 40)
(2, 50)
(3, 60)
  1. 리스트.count("찾는 문자나 수")
    리스트에 내가 찾는 요소가 몇 개 있는지 알려준다. 문제에서는 나의 점수가 최대, 최소일 때 유일한 최저점인지 확인하였다.
profile
전 척척학사지만 말하는 감자에요

0개의 댓글