import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
//ArrayList로 변환
ArrayList<Integer> lostList = new ArrayList<>();
ArrayList<Integer> reserveList = new ArrayList<>();
for(int temp : lost) {
lostList.add(temp);
}
for(int temp : reserve) {
reserveList.add(temp);
}
// lost [4, 2], reserve [3, 5] 와 같은 입력이 들어올경우 문제가 되므로 정렬
lostList.sort(Comparator.naturalOrder());
reserveList.sort(Comparator.naturalOrder());
//체육복을 도난 당한사람들 중 여벌의 체육복을 가진경우 제거
for(Iterator<Integer> lostIt = lostList.iterator(); lostIt.hasNext();) {
int lostNum = lostIt.next();
for(Iterator<Integer> reserveIt = reserveList.iterator(); reserveIt.hasNext();) {
int reserveNum = reserveIt.next();
if(lostNum == reserveNum) {
lostIt.remove();
reserveIt.remove();
break;
}
}
}
//체육복을 도난당한 학생의 앞번호나 뒷번호가 여벌의 체육복이 있을 경우 빌려줌
for(Iterator<Integer> it = lostList.iterator(); it.hasNext();) {
answer--;
int itNum = it.next();
if(reserveList.contains(itNum-1)) {
answer++;
reserveList.remove(reserveList.indexOf(itNum-1));
it.remove();
}
else if(reserveList.contains(itNum+1)) {
answer++;
reserveList.remove(reserveList.indexOf(itNum+1));
it.remove();
}
}
answer += n;
return answer;
}
}
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Arrays.sort(lost);
Arrays.sort(reserve);
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;
break;
}
}
}
for(int i=0; i<lost.length; i++){
if(lost[i] != -1){
answer--;
}
for(int j = 0 ; j < reserve.length ; j++) {
if(lost[i]-1 == reserve[j]) {
answer++;
reserve[j] = -1;
break;
}
else if(lost[i]+1 == reserve[j]) {
answer++;
reserve[j] = -1;
break;
}
}
}
answer += n;
return answer;
}
}
for(int i = 0 ; i < lostList.size() ; i++) {
if(reserveList.contains(lostList.get(i))) {
lostList.remove(i);
reserveList.remove(reserveList.indexOf(lostList.get(i)));
}
}
이미 만들어둔 코드인 전체코드2에서 전체코드로 완성하기까지 한번에 너무 많은 양의 코드를 바꾸는 바람에 문제가 발생한 부분을 파악하고 해결하는데 시간이 너무 오래 걸렸다. 다음부터는 좀 더 작은 케이스 단위로 쪼개어 변경해야겠다. 그리고 List의 삭제과정에서 뒤에 있는 원소들이 앞으로 당겨지기 때문에 for문에서 remove()메소드를 사용할 때 발생하는 문제를 알게 되어 다행이다.