📖 Problem Solution/Programmers

[Swift] 프로그래머스 위클리 챌린지 2주차 상호 평가

Fomagran 💻 2021. 8. 10. 15:00
728x90
반응형

 

Problem

 

 

코딩테스트 연습 - 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


Solution

 

1.scores의 점수를 세로로 묶어준다.

 

scores 중 i번째 학생의 점수들은 i번째 이므로 세로로 묶어서 저장합니다.

 

var selfScore = scores.map{$0[i]}

 

2. 세로로 묶은 점수들 중 i번째(자기 자신)가 최고 또는 최소라면 maxOrMin으로 저장하고 삭제해줍니다.

 

var maxOrMin = -1

if selfScore[i] == selfScore.max() ?? 0 || selfScore[i] == selfScore.min() ?? 0 {
            maxOrMin = selfScore.remove(at: i)
        }

 

3. maxOrMin이 유일한 값인지 확인하고 유일하지 않다면 다시 넣어준다.

 

if maxOrMin != -1 {
            for s in selfScore {
                if s == maxOrMin {
                    selfScore.append(s)
                    break
                }
            }
        }

 

4. 평균을 계산해 학점을 구하고 result에 넣어준다.

 

let average = selfScore.reduce(0) {$0 + $1}/selfScore.count
result.append(getGrade(score:average))

func getGrade(score:Int) -> String {
    switch score {
    case 90...100:
        return "A"
    case 80..<90:
        return "B"
    case 70..<80:
        return "C"
    case 50..<70:
        return "D"
    default:
        return "F"
    }
}

 

5. result를 모두 연결해 반환한다.

 

return result.joined()

Source Code

 

import Foundation
func solution(_ scores:[[Int]]) -> String {
var result = [String]()
for i in 0..<scores.count {
var selfScore = scores.map{$0[i]}
var maxOrMin = -1
if selfScore[i] == selfScore.max() ?? 0 || selfScore[i] == selfScore.min() ?? 0 {
maxOrMin = selfScore.remove(at: i)
}
if maxOrMin != -1 {
for s in selfScore {
if s == maxOrMin {
selfScore.append(s)
break
}
}
}
let average = selfScore.reduce(0) {$0 + $1}/selfScore.count
result.append(getGrade(score:average))
}
return result.joined()
}
func getGrade(score:Int) -> String {
switch score {
case 90...100:
return "A"
case 80..<90:
return "B"
case 70..<80:
return "C"
case 50..<70:
return "D"
default:
return "F"
}
}

728x90
반응형
댓글수0