알고리즘 문제 풀이/프로그래머스
[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
}
}
반응형