(1) 여분이 있는 학생의 앞번호와 뒷번호를 구해서 빌려줄 수 있는 학생이면 카운트 더하자
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
List Llist = new ArrayList();
for(int i=0; i< lost.length;i++) {
Llist.add(lost[i]);
Llist.sort(null);
}
List Rlist = new ArrayList();
for(int i=0; i< reserve.length;i++) {
Rlist.add(reserve[i]);
Rlist.sort(null);
}
for(int i= 0; i<reserve.length;i++) {
for(int j= 0; j<lost.length;j++) {
if(reserve[i] == lost[j]) {
Rlist.remove(Rlist.indexOf(reserve[i]) );
Llist.remove(Llist.indexOf(lost[j]));
break;
}
}
}
int all = n - Llist.size();
for(int i= 0; i<Rlist.size();i++) {
int front = (int)Rlist.get(i)-1;
int back = (int)Rlist.get(i)+1;
for(int j =0; j<Llist.size();j++) {
if(Llist.contains(front)){
all +=1;
Llist.remove(Llist.indexOf(front));
break;
} else if(Llist.contains(back)) {
all +=1;
Llist.remove(Llist.indexOf(back));
break;
}
}
}
answer = all;
return answer ;
}
}
(1) 각 배열 두 개를 리스트에 추가하여 오름차순 정렬해준다.
(2) 여분의 학생 앞 뒷 번호를 구해 분실 학생의 번호가 있다면 수업을 들을 수 있는 학생의 수를 증가시키자.
처음 풀었을 때
이 조건을 아예 고려하지 않고 풀었다가 한참을 헤맸다..
근데 이 조건을 고려해도 18번, 20번 케이스가 오류가 떠서 힌트를 봤더니 추가한 리스트를 오름차순 하여 해보라길래 했더니 성공했다. 이유를 생각해보니 만약 n = 5, 분실 = [2,4], 여분 = [3,1] 이렇게 있을 시 오름차순을 하지 않으면 3번 학생이 2번 학생을 빌려주고 난 후 1번 학생은 4번 학생을 빌려줄 수 없기 때문이었다. 오름차순 후 해준다면 분실 = [2,4], 여분 = [1,3] 이므로 1번 학생이 2번 학생을 빌려줄수도 있고 3번 학생이 4번 학생을 빌려줄 수 있다는걸 알았다. 많이 풀어보자!