본문 바로가기
코딩테스트 준비(kotlin)/그리디 알고리즘

[프로그래머스] 체육복 (kotlin)

by 1chanhue1 2025. 1. 8.

 

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
    }
}

문제해결 포인트

  1. lostSet 정렬:
    • lostSet.sorted()를 사용하여 학생 번호가 작은 순서대로 처리하도록 변경했습니다.
    • 작은 번호의 학생부터 빌려주는 것이 우선순위 충돌을 방지할 수 있습니다.
  2. MutableSet 명시적 제거:
    • reserveSet -= (i - 1) 및 reserveSet -= (i + 1)로 여벌 체육복을 빌려준 학생을 명확히 제거합니다.
    • reserveSet에서 체육복을 빌려준 학생을 정확히 제거하여 중복 대여를 방지했습니다.