알고리즘 문제 풀이/프로그래머스

[Algorithm] 프로그래머스 - 전국 대회 선발 고사 (Kotlin)

참깨빵위에참깨빵 2024. 6. 30. 23:07
728x90
반응형

 

rank, attendance의 길이는 서로 같고 몇 번 유저가 false면 버리고 true면 활용하는 문제니 Map이나 Pair를 써서 풀 수 있을 것 같다.

그리고 등수가 높은 순서대로 3명을 골라서 곱하고 더하면 될 것 같다.

 

class Solution {
    fun solution(rank: IntArray, attendance: BooleanArray): Int {
        val eligibleStudents = mutableListOf<Pair<Int, Int>>()

        for (i in rank.indices) {
            if (attendance[i]) {
                eligibleStudents.add(rank[i] to i)
            }
        }

        eligibleStudents.sortBy { it.first }

        val top3 = eligibleStudents.take(3).map { it.second }

        return 10000 * top3[0] + 100 * top3[1] + top3[2]
    }
}

 

또는 컬렉션 함수들을 활용하면 아래처럼 풀 수 있다.

 

class Solution {
    fun solution(rank: IntArray, attendance: BooleanArray): Int {
        val result = rank.mapIndexed { i, value -> i to value }
            .filter { attendance[it.first] }
            .sortedBy { it.second }
        return result[0].first * 10000 + result[1].first * 100 + result[2].first
    }
}

 

반응형