본문 바로가기

프로그래머스 (Swift)/기초

[Day21-2] 전국 대회 선발 고사

문제

 

내 정답 코드

import Foundation

func solution(_ rank:[Int], _ attendance:[Bool]) -> Int {
    var students:[Student] = []
    
    (0..<rank.count).map { students.append(Student(index: $0, rank: rank[$0], attendance: attendance[$0])) }
    
    let sortStudents = students.sorted(by: {$0.rank < $1.rank}).filter { $0.attendance == true }
    
    let (a, b, c) = (sortStudents[0].index, sortStudents[1].index, sortStudents[2].index)
    
    return 10000*a + 100*b + c
}

struct Student {
    let index: Int
    let rank: Int
    let attendance: Bool
    
    init(index: Int, rank: Int, attendance: Bool) {
        self.index = index
        self.rank = rank
        self.attendance = attendance
    }
}

 

#

1. index, rank, attence속성을 갖는 Student구조체를 만들어 사용하였다.

2. 모든 학생의 객체를 students에 append해주었다.

3. rank로 정렬을 해주고 filter로 attendance가 true인 학생만 남긴 배열을 새로 만들어 주었다.

4. 새로운 배열의 index값을 a, b, c로 지정해주고 문제 해결에 맞는 식으로 값을 반환하였다.


배운 기술

 

1. sorted(by: )

https://developer.apple.com/documentation/swift/array/sorted(by:)

 

sorted(by:) | Apple Developer Documentation

Returns the elements of the sequence, sorted using the given predicate as the comparison between elements.

developer.apple.com