이 포스팅은 프로그래머스 시리즈 28 편 중 28 번째 글 입니다.

  • Part 1 - 01: 다리를 지나는 트럭
  • Part 2 - 02: 멀정한 사각형
  • Part 3 - 03: 더 맵게
  • Part 4 - 04: 메뉴 리뉴얼
  • Part 5 - 05: 전화번호 목록
  • Part 6 - 06: 가장 큰 수
  • Part 7 - 07: 예상 대진표
  • Part 8 - 08: 다단계 칫솔 판매
  • Part 9 - 09: 불량 사용자
  • Part 10 - 10: 베스트 앨범
  • Part 11 - 11: 합승 택시 요금
  • Part 12 - 12: 스타 수열
  • Part 13 - 13: 위장
  • Part 14 - 14: 주식 가격
  • Part 15 - 15: 디스크 컨트롤러
  • Part 16 - 16: N으로 표현
  • Part 17 - 17: 전화번호 목록
  • Part 18 - 18: 단어 변환
  • Part 19 - 19: 여행 경로
  • Part 20 - 20: 프린터
  • Part 21 - 21: 후보키
  • Part 22 - 22: 삼각 달팽이
  • Part 23 - 23: 실패율
  • Part 24 - 24: 입국심사
  • Part 25 - 26: 기둥과 보 설치
  • Part 26 - 27: 광고 삽입
  • Part 27 - 28: 퍼즐 조각 채우기
  • Part 28 - This Post
▼ 목록 보기

목차

▼ 내리기

풀이

하라는 대로 구현했다. 이거 부캠 시험에서 나온것 같은 기분이.. 일단 그리고 파이썬보다 스위프트가 더 편한 이상 현상이 발견됐다…

Code

import Foundation


func getGrade(_ id: Int, _ scores: [Int]) -> String {
    // 최소 index들 구함 -> 일단 그 안에 id가 포함되어 있는지 확인 -> 포함되어 있다면 원소 개수가 1개인지
    // 최대 index들 구함
    var scores = scores
    let minScore = scores.min()!
    let maxScore = scores.max()!
    
    let minIndices = scores.enumerated().filter({ $0.element == minScore }).map { $0.offset}
    let maxIndices = scores.enumerated().filter({ $0.element == maxScore }).map { $0.offset}
    
    if minIndices.count == 1 && minIndices.contains(id) { // 유일한 최저점인 경우
        scores.remove(at: id)
    } else if maxIndices.count == 1 && maxIndices.contains(id) { // 유일한 최고점인 경우
        scores.remove(at: id)
    }
    
    let meanScore = scores.reduce(0, { $0 + $1 })/scores.count
    
    switch meanScore {
    case 90...:
        return "A"
    case 80..<90:
        return "B"
    case 70..<80:
        return "C"
    case 50..<70:
        return "D"
    case ..<50:
        return "F"
    default:
        return ""
    }
}


func solution(_ scores:[[Int]]) -> String {
    var studentScore = Dictionary<Int, [Int]>()
    let numberOfStudents = scores.count
    
    for i in 0..<numberOfStudents {
        studentScore[i] = scores.map { $0[i] }
    }
    
    var answer = ""
    for i in 0..<numberOfStudents {
        answer += getGrade(i, studentScore[i]!)
    }
    
    return answer
}

Reference