Algorithm/프로그래머스

[세무민의 코딩일기] 프로그래머스 위클리 챌린지 2주차 상호 평가 문제 풀이

세기루민 2021. 8. 12. 21:49
728x90

이번 포스팅은 프로그래머스에서 위클리 챌린지 2주차 문제 풀이로 돌아왔습니다. 


1. 문제설명 


2. 제한사항 및 입출력 예시 


3. 문제 풀이 

이번 문제에서는 가장 큰 포인트를 둬야하는 문구는 2가지입니다. 

- 자신이 가장 최대 및 최소로 준 점수라면 제거한다.

- 자신이 가장 최대 및 최소라고 생각했으나 동일한 값이 있다면 제거하지 않는다.

이 2가지의 조건만 잘 맞춰주면 문제를 풀 수 있습니다.

# 처음 코드
def solution(score):
    result = ""
    for i in range(len(score)):
        maxCheck = 0
        minCheck = 0
        maxSize = list()

        for j in range(len(score[i])):
            maxSize.append(score[j][i])


        maxCheck = maxSize.index(max(maxSize))
        minCheck = maxSize.index(min(maxSize))
        if (maxCheck == i or minCheck == i):
             if(maxSize.count(maxSize[maxCheck]) == 1 or maxSize.count(maxSize[minCheck]) == 1):
                del maxSize[i]


        sumAvg = sum(maxSize) / len(maxSize)

        print(maxSize, sumAvg)
        if (sumAvg >= 90):
            result += "A"
        elif (sumAvg >= 80 and sumAvg < 90):
            result += "B"
        elif (sumAvg >= 70 and sumAvg < 80):        
            result += "C"
        elif (sumAvg >= 50 and sumAvg < 70):                     
            result += "D"
        else:
            result += "F"


    return result

제가 처음에 생각했던 코드입니다.

테스트 케이스에 2개를 통과하지 못해서 곰곰히 생각해봣는데 list.Index의 경우 동일한 값이 있다면 

가장 앞에 있는 인덱스를 준다는 것을 생각하지 못했습니다.

따라서 index값이 1개이면서 해당 인덱스가 i랑 같다면 즉 동일한 값이 존재하지 않는 경우에는 제거하지 않도록 만들어

줍니다.

# 최종 코드
def solution(score):
    result = ""
    for i in range(len(score)):
        maxCheck, maxIndex = 0, 0
        minCheck, minIndex = 0, 0
        maxResult = 0
        minResult = 0
        maxSize = list()

        for j in range(len(score[i])):
            maxSize.append(score[j][i])
   
        maxCheck = max(maxSize)
        minCheck = min(maxSize)
        maxIndex = maxSize.index(max(maxSize))
        minIndex = maxSize.index(min(maxSize))
    

    
        if(maxSize.count(maxSize[maxIndex]) == 1 and maxSize.index(maxSize[maxIndex]) == i):
            maxResult = 1000

        if(maxSize.count(maxSize[minIndex]) == 1 and maxSize.index(maxSize[minIndex]) == i):
            minResult = 1000
    

        if(maxResult == 1000 or minResult == 1000):
            del maxSize[i]
        
    
        sumAvg = sum(maxSize) / len(maxSize)

        print(maxSize, sumAvg)
        if (sumAvg >= 90):
            result += "A"
        elif (sumAvg >= 80 and sumAvg < 90):
            result += "B"
        elif (sumAvg >= 70 and sumAvg < 80):        
            result += "C"
        elif (sumAvg >= 50 and sumAvg < 70):                     
            result += "D"
        else:
            result += "F"


    return result

위와 같이 풀었습니다. 

크게 변경된 것은 없고 비교 조건만 추가되었습니다. 


4. 결과 


이번 포스팅에서는 상호 평가에 대한 문제를 풀어봤습니다.

최근 들어서 포스팅을 할 시간이 부족해서 자주 못하지만 최대한 자주 해보도록 하겠습니다.

다음에는 더 좋은 포스팅으로 찾아오겠습니다.

 

728x90