전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓삾을 return 하도록 solution함수를 작성하는 문제이다.
lost와 reserve 배열을 정렬한 다음 체육복이 있거나 빌릴 수 있는 학생들(체육복을 도난 당하지 않은 학생, 도난당했지만 예비로 들고 온 학생, 도난당했지만 체육복을 빌릴 수 있는 학생)을 answer에 더한다.
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Arrays.sort(reserve);
Arrays.sort(lost);
// 도난 당하지 않은 학생 수
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]) {
answer++;
lost[i] = -1;
reserve[j] = -1;
break;
}
}
}
// 도난당했지만 체육복을 빌릴 수 있는 학생 수
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if (lost[i] - 1 == reserve[j] || lost[i] + 1 == reserve[j]) {
answer++;
reserve[j] = -1;
break;
}
}
}
return answer;
}
}