TIL - algorithm - 2차원 리스트(2)

김영훈·2021년 8월 11일
0

ETC

목록 보기
21/34

# 문제

문제 지문이 길어서 아래 링크로 대신한다.

알고리즘 문제 링크

# 풀이

  • 이전에 포스팅 했던 문제처럼 2차원 리스트를 활용하는 문제다. 규칙을 찾기 위해 N명의 학생 개인 별 평가받은 점수를 인덱스로 나타내 보자.
   # 0번 학생의 점수: (0,0), (1,0), (2,0) ... (4,0)
   # 1번 학생의 점수: (0,1), (1,1), (2,1) ... (4,1)
   # .
   # .
   # .
   # 4번 학생의 점수: (0,4), (1,4), (2,4) ... (4,4)
   
   # n번 학생의 점수: (0,n), (1,n), ...       (4,n)
   -> x축은 0, 1, 2, 3, 4 가 차례로 온다. ->  range(5) -> 일반화하면 range(N)
   -> y축은 n으로 고정
  • N명의 학생의 개인 점수의 평균을 구하는 코드를 만들어보면 다음과 같다.
   student_avg = []
   for n in range(N):
       n_toal = 0
       for m in range(N):
           n_total += scores[m][n]
       avg = n_total / N
       student_avg.append(avg)
  • 학생의 전체 숫자는 len(scores)와 동일하므로 아래처럼 표현할 수 있다.
   student_avg = []
   for n in range(len(scores)):
       n_toal = 0
       for m in range(len(scores)):
           n_total += scores[m][n]
       avg = n_total / len(scores)
       student_avg.append(avg)
  • 하지만 학생 개인의 평균을 구하려면 아래의 조건을 준수해야 한다. 이러한 조건은 if 문을 활용하여 처리하면 된다.
  • 또한, 학생이 받은 평가 점수 중에서 자신이 평가한 점수가 무엇인지 알아야 하므로 기존의 n_toal 대신 n_scores라는 리스트 객체를 만들어 여기에 학생들의 개인 점수를 저장하도록 하자.

    만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구합니다.

    student_avg = []
    for n in range(len(scores)):
        n_scores = []
        for m in range(len(scores)):
            n_scores.append(scores[m][n])
            
        if (n_scores[n]==max(n_scores) or n_scores[n]==min(n_scores)) and (n_scores.count(n_scores[n]) == 1):
            del n_scores[n]
            avg = sum(n_scores) / len(n_scores)
            student_avg.append(avg)
        else:
            avg = sum(n_scores) / len(n_scores)
            student_avg.append(avg)
  • 이제 여기에 학생들의 평균 점수를 등급으로 환산해주는 코드를 추가해주면 된다. 완성된 코드는 아래와 같다.
def solution(scores):
    answer = ''
    student_avg = []
    for n in range(len(scores)):
        n_scores = []
        for m in range(len(scores)):
            n_scores.append(scores[m][n])
        print(n_scores)
        if (n_scores[n]==max(n_scores) or n_scores[n]==min(n_scores)) and (n_scores.count(n_scores[n]) == 1):
            del n_scores[n]
            avg = sum(n_scores) / len(n_scores)
            student_avg.append(avg)
        else:
            avg = sum(n_scores) / len(n_scores)
            student_avg.append(avg)
            
    for avg in student_avg:
        if avg >=90:
            answer += 'A'
        elif avg >=80:
            answer += 'B'
        elif avg >=70:
            answer += 'C'
        elif avg >=50:
            answer += 'D'
        else:
            answer += 'F'
    return answer
profile
Difference & Repetition

0개의 댓글