- 1씩 채운다.
- 각 배열의 원소는 인덱스 + 1 값이므로 -1 해서 해당 인덱스로 잡아 student에서 빼거나 더한다.
- 1부터 시작하고 length-1 까지 루프를 돌렸다. 중간을 기준으로 앞뒤를 잡으려고 그랬다.
- 그렇다면 첫수와 끝수의 고려가 필요해져서 분기를 놓았다.
- 맞았다.
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
// 총 학생 수, 반드시 앞 뒤에서만 빌려줄 수 있음. 인덱스 기준으로 함.
int[] student = new int[n];
// 세팅
for (int i = 0; i < student.length; i++) {
student[i] += 1;
}
for (int i = 0; i < reserve.length; i++) {
int reserveNo = reserve[i] - 1;
student[reserveNo] += 1;
}
for (int i = 0; i < lost.length; i++) {
int lostNo = lost[i] - 1;
student[lostNo] -= 1;
}
// 계산
if (student[0] == 0 && student[1] == 2) {
student[1] -= 1;
student[0] += 1;
}
for (int i = 1; i < student.length - 1; i++) {
if (student[i] == 0) {
if (student[i - 1] == 2) {
student[i - 1] -= 1;
student[i] += 1;
} else if (student[i + 1] == 2) {
student[i + 1] -= 1;
student[i] += 1;
}
}
}
if (student[student.length - 1] == 0 && student[student.length - 2] == 2) {
student[student.length - 1] += 1;
student[student.length - 2] -= 1;
}
int answer = 0;
for (int i = 0; i < student.length; i++) {
answer += (student[i] == 0) ? 0 : 1;
}
return answer;
}
}