프로그래머스 Weekly Challenge 2주차

1) Array(repeating: ,count:)를 이용해서 원하는 크기의 배열을 만들수 있다.
2) Dictionary(Array.map{ ($0, 1) }, uniquingKeysWith: + )를 이용하면 배열안에 해당값이 몇개인지 리턴하는 Dictionary를 얻을 수 있다.

func solution(_ scores:[[Int]]) -> String {
    
    var matrix = Array(repeating:Array(repeating: 0, count: scores.count),count: scores.count)
    var result: String = ""
    
    for (i,score) in scores.enumerated() {
        for j in 0..<score.count {
            matrix[i][j] = scores[j][i]
        }
    }
    
    for (i, score) in matrix.enumerated() {
        print(matrix)
        var sum = 0
        var avg: Float = 0
        if let max = score.max(), let min = score.min() {
            if score[i] == max || score[i] == min { // 자기에게 준 점수가 max또는 min에 해당되면
                let counts = Dictionary(score.map{ ($0, 1) }, uniquingKeysWith: + )
                if counts[score[i]] ?? 0 >= 2 { // 같은수가 2개이상이면
                    sum = score.reduce(0, +)
                    avg = Float(sum)/Float(score.count)
                } else { // 값 같은게 없으면
                    sum = score.reduce(0, +) - score[i]
                    avg = Float(sum)/Float(score.count - 1)
                }
            } else { // 해당 안되면
                sum = score.reduce(0, +)
                avg = Float(sum)/Float(score.count)
            }
        }
        if avg >= 90 {
            result.append("A")
        } else if avg >= 80, avg < 90 {
            result.append("B")
        } else if avg >= 70, avg < 80 {
            result.append("C")
        } else if avg >= 50, avg < 70 {
            result.append("D")
        } else {
            result.append("F")
        }
    }
    return result
}

좋은 웹페이지 즐겨찾기