코딩테스트

프로그래머스 - 상호평가 (2주차)

SigmoidFunction 2021. 8. 10. 10:42
728x90

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

 

2주차 챌린지 문제가 올라왔다.

 

문제가 꽤나 길다!

 

간단하게 이야기하면 각자 모두에게 평가를 한다. 그리고 자기가 받은 점수 중에 스스로 평가한 점수가 유일한 최고점이거나 최저점일 경우 그 값을 빼고 평균을 내어 성적을 출력한다는 내용이다.

 

처음엔 각 학생들마다의 성적리스트를 만들어서 모두 넣어버릴 생각을 했다.

 

그런데 그건 너무 비효율적이기도하고.. 조금 생각해보니까 한명한명 점수산출하고 다음 사람을 출력하는것이 더 낫겠다는 생각이 들었다.

 

def solution(scores):
    answer = ''
    for i in range(len(scores)):
        tempt=[]
        for j in range(len(scores)):
            tempt.append(scores[j][i])
        if max(tempt) == scores[i][i] and tempt.count(max(tempt)) == 1:
            tempt.remove(max(tempt))
        elif min(tempt) == scores[i][i] and tempt.count(min(tempt)) == 1:
            tempt.remove(min(tempt))

 

일단 이렇게 한명한명의 점수를 확인할 수 있다. 

 

이중반복문인 것이 마음에 들지는 않지만..일단 즉각적인 아이디어를 떠올렸고 확인하는 것이 우선이었으니까!

 

효율 부분은 시간을 두고 천천히 고쳐나가면 되니까..

 

이제 점수만 산출하면 된다. 무지 쉽다.

 

avg = sum(tempt)/len(tempt)
        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

코딩 초보자가 봐도 알기 쉬운 코딩!

 

코딩은 효율과 직관성이 가장 중요하다고 생각한다.

 

아무리 압축해놔도 다른 사람이 알기 힘들면 뭔 소용이람

 

그렇게 완성된 최종코드는

 

def solution(scores):
    answer = ''
    for i in range(len(scores)):
        tempt=[]
        for j in range(len(scores)):
            tempt.append(scores[j][i])
        if max(tempt) == scores[i][i] and tempt.count(max(tempt)) == 1:
            tempt.remove(max(tempt))
        elif min(tempt) == scores[i][i] and tempt.count(min(tempt)) == 1:
            tempt.remove(min(tempt))
            
        avg = sum(tempt)/len(tempt)
        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

 

아주 훌륭하게 결과가 나온 것을 확인할 수 있었다.

 

위 코딩에서 손을 본다면 이중반복문을 좀 없애고 싶긴 하다.

 

뭔가 날 것 그대로의 느낌이랄까.. 아직 생각은 안해봤지만..

728x90