체육복
체육복을 잃어버린 학생은 자기번호 바로 앞뒤 번호에서만 체육복을 빌릴 수 있다. 총 체육복을 학생 수를 구해야한다.
새 배열을 만들어서 체육복이 없으면 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()으로 양쪽에 모두 포함된 번호 제거