제한 사항을 주의하자.
→ 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
체육복이 존재하여 수업을 들을 수 있는 학생은 적어도 “n-lost.length”이다. 여기서 반복문을 통해 lost 배열에 있는 학생들을 작은 숫자를 먼저 확인하여 통과 시킨다.
이때 자기 자신이 체육복을 도난 당한 경우는 다른 사람에게 체육복을 빌려줄 수 없으므로 앞선 반복문을 통과하기 전에 제거해준다.
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
Arrays.sort(lost);
/* 현재 사용 가능한 여분 체육복 번호를 list에 넣기 */
List<Integer> lost_list = new ArrayList<>();
for(int i=0; i<lost.length; i++) {
lost_list.add(lost[i]);
}
List<Integer> reserve_list = new ArrayList<>();
for(int i=0; i<reserve.length; i++) {
reserve_list.add(reserve[i]);
}
**// 자기 자신은 제외
for(int i=0; i<lost.length; i++) {
if(reserve_list.contains(lost[i])) {
answer++;
reserve_list.remove(Integer.valueOf(lost[i]));
lost_list.remove(Integer.valueOf(lost[i]));
}
}**
// 수업 들을 수 있는 학생 count 시작
for(int i=0; i<lost_list.size(); i++) {
if(reserve_list.contains(lost_list.get(i)-1)) {
answer++;
reserve_list.remove(Integer.valueOf(lost_list.get(i)-1));
continue;
}
else if(reserve_list.contains(lost_list.get(i)+1)) {
answer++;
reserve_list.remove(Integer.valueOf(lost_list.get(i)+1));
continue;
}
}
return answer;
}
}