본문 바로가기
📖 Problem Solution/Programmers

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

by Fomagran 💻 2021. 8. 10.
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

 

728x90
반응형

댓글