[programmers] 위클리챌린지2주차/상호평가

resilient

·

2021. 8. 20. 10:11

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

  • 이 문제는 먼저 네이버 2021년 4월에 시험 봤던 상반기 신입 코딩 테스트 1번 문제였다.
  • 당시에는 i랑 j 랑 행과 열을 잘못 봐서 시간을 생각보다 많이 썼던 문제였다.
  • 풀이는 간단하다. 점수를 인원수만큼 첫 번째 for문을 돌리면서 돌 때마다 temp라는 리스트를 빈 리스트로 초기화해준다.
    그리고 인원수만큼 또 한 번 for문을 돌려주면서 점수들을 temp 안에 넣고 첫 번째 for문을 돌 때 temp [i] 값이 자기가 측정한 자기 자신의 점수니까 temp [i] 값만 비교해주면 된다. 
  • temp [i] 즉, 자신이 측정한 자신의 점수가 가장 크거나 유일한 값일 때, 그 값을 del (삭제) 시켜주고 만약에 둘 중 하나라도 아리 경우 temp [i]가 가장 작거나 유일한 값일 때를 고려해준다.
  • 자신이 측정한 값이 유일하면서 가장 크거나 작을 경우를 제외한 값들이 들어 있는 temp 리스트의 합에서 temp리스트의 길이를 나눠주면 평균이 되고, 평균을 if문으로 answer라는 빈 문자열에 더해주면 된다.
def solution(scores):
    answer = ''
    length = len(scores)
    for i in range(length):
        score = 0
        cnt = 0
        temp = []
        for j in range(length):
            temp.append(scores[j][i])
        # i는 0,1,2,3,4 순서대로 자기꺼만 확인하면 된다.
        # 자기자 측정한 자기 점수가 젤 크거나 작을 때 유일한 값이면 지운다.
        if temp[i] == min(temp) and temp.count(temp[i]) == 1:
            del temp[i]
        elif temp[i] == max(temp) and temp.count(temp[i]) == 1:
            del temp[i]
      
        average = sum(temp) // len(temp)
        if average >= 90:
            answer += 'A'
        elif 80 <= average < 90:
            answer += 'B'
        elif 70 <= average < 80:
            answer += 'C'
        elif 50 <= average < 70:
            answer += 'D'
        elif average < 50:
            answer += 'F'

               
    return answer
반응형