
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length; // 여벌도 없고 잃어버리지도 않은 학생
Arrays.sort(reserve);
Arrays.sort(lost);
// 여분이 있지만 도난당하지 않은 학생 리스트
List<Integer> reserveList = new ArrayList<>();
for (int r : reserve) {
reserveList.add(r);
}
// 여분이 있지만 도난당한 학생 먼저 처리
List<Integer> lostList = new ArrayList<>();
for (int l : lost) {
lostList.add(l);
}
for (int l : lost) {
if (reserveList.contains(l)) {
reserveList.remove(Integer.valueOf(l));
answer++;
lostList.remove(Integer.valueOf(l));
}
}
// 남은 도난당하지 않은 학생들에 대해 여분이 있는지 확인하고 처리
for (int l : lostList) {
if (!reserveList.contains(l)) {
if (reserveList.contains(l - 1)) {
reserveList.remove(Integer.valueOf(l - 1));
answer++;
} else if (reserveList.contains(l + 1)) {
reserveList.remove(Integer.valueOf(l + 1));
answer++;
}
}
}
return answer;
}
}
5, 7, 12, 24번 테스트 실패
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length; // 여벌도 없고 잃어버리지도 않은 학생
Arrays.sort(reserve);
Arrays.sort(lost);
// 여분이 있지만 도난당하지 않은 학생 리스트
List<Integer> reserveList = new ArrayList<>();
for (int r : reserve) {
reserveList.add(r);
}
// 여분이 있지만 도난당한 학생 먼저 처리
for (int l : lost) {
if (reserveList.contains(l)) {
reserveList.remove(Integer.valueOf(l));
answer++;
}
}
// 남은 도난당하지 않은 학생들에 대해 여분이 있는지 확인하고 처리
for (int l : lost) {
if (!reserveList.contains(l)) {
if (reserveList.contains(l - 1)) {
reserveList.remove(Integer.valueOf(l - 1));
answer++;
} else if (reserveList.contains(l + 1)) {
reserveList.remove(Integer.valueOf(l + 1));
answer++;
}
}
}
return answer;
}
}
런타임 에러
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length; // 여벌도 없고 잃어버리지도 않은 학생
Arrays.sort(reserve);
Arrays.sort(lost);
// 박싱(boxing)을 통해 Integer 객체 배열로 변환
Integer[] lost_sort = Arrays.stream(lost).boxed().toArray(Integer[]::new);
Integer[] reserve_sort = Arrays.stream(reserve).boxed().toArray(Integer[]::new);
// Arrays.asList()를 사용하여 Integer 객체 배열을 ArrayList로 변환
List<Integer> reserve_list = new ArrayList<>(Arrays.asList(reserve_sort));
List<Integer> lost_list = new ArrayList<>(Arrays.asList(reserve_sort));
//여분이 있지만 도난당해서 하나만 있는 학생 제외
for (int i = 0; i < len; i++) {
// lost[i]-1 또는 +1의 값이 reserve2 리스트에 있으면 리스트에서 삭제
if (reserve_list.contains(lost_sort[i])) {
reserve_list.remove(Integer.valueOf(lost_sort[i]));
lost_list.remove(Integer.valueOf(lost_sort[i]));
}
}
for (int i = 0; i < lost_list.size; i++) {
// lost[i]-1 또는 +1의 값이 reserve2 리스트에 있으면 리스트에서 삭제
if (reserve_list.contains(lost_list.get(i) - 1)) {
reserve_list.remove(Integer.valueOf(lost_list.get(i) - 1)); // 박싱된 값으로 삭제
answer++;
} else if (reserve_list.contains(lost_list.get(i) + 1)) {
reserve_list.remove(Integer.valueOf(lost_list.get(i) + 1)); // 박싱된 값으로 삭제
answer++;
}
}
return answer;
}
}
여분이 있지만 도난당해서 하나만 있는 학생 제외
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int len = lost.length;
int answer = n - len; // 여벌도 없고 잃어버리지도 않은 학생
Arrays.sort(reserve);
Arrays.sort(lost);
// 박싱(boxing)을 통해 Integer 객체 배열로 변환
Integer[] lost_sort = Arrays.stream(lost).boxed().toArray(Integer[]::new);
Integer[] reserve_sort = Arrays.stream(reserve).boxed().toArray(Integer[]::new);
// Arrays.asList()를 사용하여 Integer 객체 배열을 ArrayList로 변환
List<Integer> reserve_list = new ArrayList<>(Arrays.asList(reserve_sort));
//여분이 있지만 도난당해서 하나만 있는 학생 제외
for (int i = 0; i < len; i++) {
// lost[i]-1 또는 +1의 값이 reserve2 리스트에 있으면 리스트에서 삭제
if (reserve_list.contains(lost_sort[i])) {
reserve_list.remove(Integer.valueOf(lost_sort[i]));
}
}
for (int i = 0; i < len; i++) {
// lost[i]-1 또는 +1의 값이 reserve2 리스트에 있으면 리스트에서 삭제
if (reserve_list.contains(lost_sort[i] - 1)) {
reserve_list.remove(Integer.valueOf(lost_sort[i] - 1)); // 박싱된 값으로 삭제
answer++;
} else if (reserve_list.contains(lost_sort[i] + 1)) {
reserve_list.remove(Integer.valueOf(lost_sort[i] + 1)); // 박싱된 값으로 삭제
answer++;
}
}
return answer;
}
}

제일 처음 작성한 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int len = lost.length;
int answer = n - len; // 여벌도 없고 잃어버리지도 않은 학생
Arrays.sort(reserve);
Arrays.sort(lost);
// 박싱(boxing)을 통해 Integer 객체 배열로 변환
Integer[] lost_sort = Arrays.stream(lost).boxed().toArray(Integer[]::new);
Integer[] reserve_sort = Arrays.stream(reserve).boxed().toArray(Integer[]::new);
// Arrays.asList()를 사용하여 Integer 객체 배열을 ArrayList로 변환
List<Integer> reserve_list = new ArrayList<>(Arrays.asList(reserve_sort));
for (int i = 0; i < len; i++) {
// lost[i]의 값이 reserve2 리스트에 있으면 리스트에서 삭제
if (reserve_list.contains(lost_sort[i] - 1)) {
reserve_list.remove(Integer.valueOf(lost_sort[i] - 1)); // 박싱된 값으로 삭제
answer++;
} else if (reserve_list.contains(lost_sort[i] + 1)) {
reserve_list.remove(Integer.valueOf(lost_sort[i] + 1)); // 박싱된 값으로 삭제
answer++;
}
}
return answer;
}
}

https://school.programmers.co.kr/learn/courses/30/lessons/42862