[프로그래머스] 위클리 챌린지 2주차 파이썬

FFTL:)·2021년 8월 9일

위클리 챌린지 (https://programmers.co.kr/learn/challenges)

문제

평균 구하기 문제입니다. 다만 하나 다른점이 특정 인덱스의 값이 최댓값 또는 최솟값일 경우에 그 수를 제외하고 평균을 구하면 되는 문제입니다.

문제해결

  • 일단 각각의 학생을 한명씩 해당 학생의 점수를 모아줍니다.
  • 그리고 그 학생이 자신에게 부여한 점수가 최댓값 또는 최솟값인지 판단합니다.
  • 그 점수가 최댓값 또는 최솟값일 경우 그 값의 개수를 새어 하나 이상이라면 그냥 평균을 구하고 하나라면 해당 수를 제외한 뒤 평균을 구해줍니다.
  • 이렇게 구한 평균들을 가지고 주어진 조건에 맞추어 학점을 매겨 답을 구합니다.
#학점 구하기
def checkCredit(avg):
    if avg >= 90:
        return "A";
    elif 90 > avg >= 80:
        return "B";
    elif 80 > avg >= 70:
        return "C";
    elif 70 > avg >= 50:
        return "D";
    elif 50 > avg:
        return "F";

#문제 풀이
def solution(scores):
    answer = '';
    avg = [];	#각 학생의 평균을 담아줄 avg
 	
    for i in range(0, len(scores)):
        now = [];	#이번 학생의 점수를 모두 담아줄 now
        my_score = 0;	#자신을 평가한 점수
        
        #now에 점수를 담아주며 만약 내가 평가한 점수일 경우
	#my_score에도 담아줍니다.
        for j in range(0, len(scores)):
            now.append(scores[j][i]);
            if j == i:
                my_score = scores[j][i];
        
        #만약 자신을 평가한 점수가 최댓값 또는 최솟값 일 경우 if 실행
        if my_score == max(now) or my_score == min(now):
        	
            #만약 최댓값, 또는 최솟값인 my_score의 개수가 1개 이상일 경우
            #그냥 평균을 구해서 avg에 넣어줍니다.
            if now.count(my_score) > 1:
                avg.append(sum(now)/len(now));
            
            #my_score의 개수가 1개라면 해당 수를 빼고, 갯수도 빼서 평균을
            #구해 avg에 넣어줍니다.
            else:
                avg.append((sum(now)-my_score)/(len(now)-1));
        
        #내 점수가 최댓값, 최솟값이 아니라면 그냥 평균을 구해줍니다.
        else:
            avg.append(sum(now)/len(now));
        
    #각 평균의 수를 하나씩 꺼내 checkCredit()를 이용하여 answer에 이어줍니다.
    for a in avg:
        answer += checkCredit(a);
        
    
    return answer;
profile
생각하는 개발자가 되자!

0개의 댓글