[프로그래머스] 2주차

monshell·2021년 8월 11일
0

ALGORITHM

목록 보기
6/17

문제 링크 :

문제 요약 :

  • 본인이 본인을 평가한 점수가 유일한 최저점, 최고점이면 계산에서 제외하고, 아니면 포함하여 평균 점수를 기준으로 학점을 부여한다.

풀이 흐름 :

  • i 번째 학생이 본인을 평가한 점수가 '유일한' '최저점' 또는 '최고점' 인지 확인한다.
    -> scores[i] 에서 scores[i][i]보다 작거나, 크거나, 같은 scores[i][j]의 값이 있는지 카운트 한다. 카운트 하면서 해당 행의 모든 수들의 합(sum)을 같이 구한다.
    보다 작은 수가 없다 -> 최저점이다
    보다 큰 수가 없다 -> 최고점이다
    같은 수가 없다 -> 유일하다
  • 최저점이고 유일하다 or 최고점이고 유일하다는 조건에 맞으면 sum-scores[i][i], 사람수-1 한 값으로 평균 구하기
  • 위 조건에 맞지 않으면 sum, 사람수 로 평균 구하기

풀이 언어 : Kotlin

class Solution {
    fun solution(scores: Array<IntArray>): String {
        var answer: String = ""
        var count: Int = scores.size

        for(myId in scores.indices){
            var sum: Int = 0
            var average: Int = 0

            // 내 점수보다 작은/큰 점수를 준 사람이 몇명인지 카운트
            var lowerCount: Int = 0
            var higherCount: Int = 0
            var sameCount: Int = 0
            var myScore: Int = scores[myId][myId]

            for(yourId in scores.indices){
                var yourScore = scores[yourId][myId]
                sum += yourScore
                if(myScore > yourScore) lowerCount++
                if(myScore < yourScore) higherCount++
                if(myScore == yourScore) sameCount++
            }

            if(sameCount == 1  &&
                (lowerCount == 0 || higherCount == 0 ))
                average = (sum - myScore) / (count-1)
            else
                average = sum / count

            when(average){
                in 90..100 -> answer += 'A'
                in 80..89 -> answer += 'B'
                in 70..79 -> answer += 'C'
                in 50..69 -> answer += 'D'
                else -> answer += 'F'
            }

        }
        return answer
    }
}

0개의 댓글