👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=kotlin
👊 도전
1. 설계
- 문제 조건에 맞게 진행
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
val array = Array<Int>(n) { 1 }
lost.forEach {
array[it - 1]--
}
reserve.forEach {
array[it - 1]++
}
array.forEachIndexed { index, i ->
if (i > 1 && array.getOrNull(index - 1) == 0) {
array[index - 1] = 1
array[index]--
} else if (i > 1 && array.getOrNull(index + 1) == 0) {
array[index + 1] = 1
array[index]--
}
}
return array.count { it != 0 }
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 배열을 이용하여 학생의 체육복 개수를 세팅한다
- 모두가 하나씩 가지고 있는 게 디폴트이므로 1로 초기화한다.
- lost를 돌면서 잃어버린 학생(i)에게 array[i]–를 해준다.
- reserve를 돌면서 여분을 가지고 있는 학생은 array[i]++를 해준다.
- 위 for문을 통해 잃어버렸지만 여분을 가지고 있었던 학생도 커버가 가능하다.
- 여분을 가지고 있는 학생은 앞 또는 뒤로 줄 수 있다
- 앞에서부터 채워야 한다고 생각하고 내가 여분을 가지고 있는데 이전 학생이 없다면 내 것을 준다. (나는 –, 이전학생은 ++)
- else if를 통해 뒤에 학생이 없다면 다음 학생에게 준다.
- array에 0이 아닌 개수를 카운트 하여 리턴한다.