코딩테스트 준비(kotlin)/그리디 알고리즘
[프로그래머스] 체육복 (kotlin)
1chanhue1
2025. 1. 8. 00:32
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에서 체육복을 빌려준 학생을 정확히 제거하여 중복 대여를 방지했습니다.