현실적으로 수업에 들을 수 있는 학생 수 계산. (안전하게 수업을 들을 수 있는 학생 수를 계산한다는 의미이다!)
lost 값을 기준으로 reserve 값과 같은 값이 있다면 lost, reserve 값을 -1로 변경. (-1로 변경하는 이유는 배열 요소를 삭제한다는 개념으로 생각하면 된다.)
( 주의사항 ) -1로 변경할 때 정답(수업을 들을 수 있는 학생 수)에 1명을 추가해야한다!! 왜냐하면 이 경우에는 학생에게 체육복은 빌려줄 수 없으나 수업은 들을 수 있는 경우이기 때문이다.
lost 값에서 -1, +1 한 결과가 reserve에 존재하는지 확인. 만약 있다면 정답에 1명 추가.
( 주의사항 ) -1 연산부터 수행해야한다. --> 작은값부터 탐색해야 여벌 체육복이 남지 않도록 체육복을 빌려줄 수 있기 때문이다.
풀이방법은 잘 생각하였으나 break문, 중간에 오류로 인해 시간을 많이 잡아먹었다... 많은 문제풀이만이 살 길이라고 생각합니다..ㅠㅠ
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if (lost[i] == reserve[j]) {
lost[i] = -1;
reserve[j] = -1;
answer++;
break;
}
}
}
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if (lost[i] - 1 == reserve[j]) {
reserve[j] = -1;
answer++;
break;
} else if (lost[i] + 1 == reserve[j]) {
reserve[j] = -1;
answer++;
break;
}
}
}
return answer;
}
}