TIL #27

loci·2024년 6월 26일
0

TIL

목록 보기
56/111

체육복

체육복을 잃어버린 학생은 자기번호 바로 앞뒤 번호에서만 체육복을 빌릴 수 있다. 총 체육복을 학생 수를 구해야한다.

새 배열을 만들어서 체육복이 없으면 0 있으면 1 여분이 있으면 2로 상태를 설정해 2일때 체육복을 빌려주고 체육복을 빌렸으면 1로 바꿔주는 식으로 풀었음


나의 풀이

class Solution {
    fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
        var answer = -2
        var arr = IntArray(n+2){1}     
        
        for(i in lost){
            arr[i]--
        }
        for(i in reserve){
            arr[i]++
        }
        for(i in 1 until arr.size){
            if(arr[i] == 2){
                if(arr[i-1] == 0){
                    arr[i-1] = 1
                } else if(arr[i+1] == 0){
                    arr[i+1] = 1
                }
            }
        }
        
        return arr.count{it >= 1} -2
    }
}

다른사람의 풀이

class Solution {
        fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {

            var answer = n
            var lostSet = lost.toSet() - reserve.toSet()
            var reserveSet = (reserve.toSet() - lost.toSet()) as MutableSet

            for (i in lostSet) {
                when {
                    i + 1 in reserveSet -> reserveSet.remove(i + 1)
                    i - 1 in reserveSet -> reserveSet.remove(i - 1)
                    else -> answer--
                }
            }
            return answer
        }
}

lost.toSet() - reserve.toSet() 과 reserve.toSet() - lost.toSet()으로 양쪽에 모두 포함된 번호 제거

profile
편리한 개발자

0개의 댓글