코딩테스트
[프로그래머스] 전국 대회 선발 고사
liz_devel
2025. 2. 6. 20:36
🗒 문제
📝 나의 문제풀이
class Solution {
fun solution(rank: IntArray, attendance: BooleanArray): Int {
val student = rank.filterIndexed{ i, v -> attendance[i] == true}.sorted().take(3)
return 10000 * rank.indexOf(student[0]) + 100 * rank.indexOf(student[1]) + rank.indexOf(student[2])
}
}
📝 다른 사람의 문제 풀이
다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.
class Solution {
fun solution(rank: IntArray, attendance: BooleanArray): Int {
val result = rank.mapIndexed { i, v -> i to v }
.filter { attendance[it.first] }
.sortedBy { it.second }
return result[0].first * 10000 + result[1].first * 100 + result[2].first
}
}
🖊 문제 풀이 시 알면 좋을 것
filterIndexed { index, value -> 조건 }
- index와 value를 이용해 특정 조건을 만족하는 요소만 필터링.
- 원본 리스트나 배열을 변경하지 않고 새로운 리스트 반환.
- 반환 타입: List<T> (원본 배열이 IntArray면 List<Int> 반환)
val rank = intArrayOf(3, 1, 4, 2)
val attendance = booleanArrayOf(true, false, true, true)
val filtered = rank.filterIndexed { i, v -> attendance[i] }
println(filtered) // [3, 4, 2] (출석한 학생만 필터링)
sorted()
- 리스트의 요소를 오름차순으로 정렬해 새로운 리스트 반환.
- 원본 리스트를 변경하지 않음.
- 반환 타입: List<T>
val sortedList = listOf(3, 1, 4, 2).sorted()
println(sortedList) // [1, 2, 3, 4]
sortedBy { it.필드 }
- 특정 기준(필드 값)을 기준으로 오름차순 정렬.
- Pair, 데이터 클래스, 객체 리스트 등에 유용함.
- 반환 타입: List<T> (예: List<Pair<Int, String>>)
val students = listOf(3 to "A", 1 to "B", 4 to "C", 2 to "D")
val sortedStudents = students.sortedBy { it.first }
println(sortedStudents) // [(1, "B"), (2, "D"), (3, "A"), (4, "C")]
take(n)
- 리스트에서 앞 n개의 요소만 가져옴.
- 리스트 크기가 n보다 작으면 있는 만큼 반환.
- 반환 타입: List<T> (예: List<Int>)
val top3 = listOf(5, 3, 1, 4, 2).sorted().take(3)
println(top3) // [1, 2, 3]
indexOf(value)
- 리스트나 배열에서 특정 값의 인덱스 반환.
- 값이 없으면 -1 반환.
- 반환 타입: Int
val rank = listOf(3, 1, 4, 2)
println(rank.indexOf(1)) // 1
반응형