1. Set으로 풀이.
class Solution {
fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
var answer = n
// 여벌이 있으면서 도난당한 학생 제거
val lostSet = lost.toSet() - reserve.toSet()
var reserveSet = reserve.toSet() - lost.toSet()
// 체육복 빌려주기
for (i in lostSet.sorted()) {
when {
i - 1 in reserveSet -> reserveSet -= (i - 1)
i + 1 in reserveSet -> reserveSet -= (i + 1)
else -> answer--
}
}
return answer
}
}
문제해결 포인트
- lostSet 정렬:
- lostSet.sorted()를 사용하여 학생 번호가 작은 순서대로 처리하도록 변경했습니다.
- 작은 번호의 학생부터 빌려주는 것이 우선순위 충돌을 방지할 수 있습니다.
- MutableSet 명시적 제거:
- reserveSet -= (i - 1) 및 reserveSet -= (i + 1)로 여벌 체육복을 빌려준 학생을 명확히 제거합니다.
- reserveSet에서 체육복을 빌려준 학생을 정확히 제거하여 중복 대여를 방지했습니다.
'코딩테스트 준비(kotlin) > 그리디 알고리즘' 카테고리의 다른 글
[kotlin] 회의실 배정 (0) | 2025.04.03 |
---|---|
[kotlin, 프로그래머스] 조이스틱 (0) | 2025.01.15 |
[kotlin 프로그래머스] 큰 수 만들기 (level 2) (0) | 2025.01.08 |
[kotlin] 코틀린 백준 2839번 설탕배달 (0) | 2023.08.15 |