[Python] 프로그래머스 - Weekly Challenge 2주차

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/83201

 

코딩테스트 연습 - 2주차

[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD"

programmers.co.kr

# 저번주부터 매주마다 한 문제씩 공개되는 weekly challenge이다.

   이번 주 문제는 저번 주보다는 어려웠지만, 단순 구현문제였다.

 

1. 학생들이 받은 점수는 가로 값을 보는 것이 아니라 세로값을 봐야 하므로

    2중 for문에서 scores[j][i]로 s에 append해주었다.

   

2. 자기 자신한테 준 점수는 scores[i][i]이므로 target = scores[i][i]로 설정하고

   s(i번 학생이 받은 점수들)의 최댓값이 target이고 s.count(target) = 1이거나 (유일한 값)

   s의 최솟값이 target이고 그 값이 유일하면 score_sum에 [받은 총점수 - target, 사람 수 -1]을 넣어주고

   그게 아니라면 score_sum에 [받은 총점수, 사람 수]를 넣어준다.

 

3. i번 학생이 받은 평균은 score_sum[i]의 (받은 총점수 / 사람 수)이므로

    i[0] / i[1]을 if문으로 걸러서 answer에 각각 학점을 더해주면 된다.

 

def solution(scores):
    answer = ''
    score_sum = []
    for i in range(len(scores)):
        s = []
        for j in range(len(scores)):
            s.append(scores[j][i])
        target = scores[i][i]
        if (max(s) == target and s.count(target) == 1) or (min(s) == target and s.count(target) == 1):
            score_sum.append([sum(s) - target, len(scores) - 1])
        else:
            score_sum.append([sum(s), len(scores)])
    
    for i in score_sum:
        if i[0] / i[1] >= 90:
            answer += 'A'
        elif i[0] / i[1] >= 80:
            answer += 'B'
        elif i[0] / i[1] >= 70:
            answer += 'C'
        elif i[0] / i[1] >= 50:
            answer += 'D'
        elif i[0] / i[1] < 50:
            answer += 'F'
    return answer

 

728x90
반응형
TAGS.

Comments