public static int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Arrays.sort(reserve);
Arrays.sort(lost);
HashSet<Integer> set = new HashSet<>();
Queue<Integer> rq = new LinkedList<>();
Queue<Integer> lq = new LinkedList<>();
Queue<Integer> dq = new LinkedList<>();
int cnt = reserve.length;
for (int l : lost) {
set.add(l);
lq.add(l);
}
for (int r : reserve) {
set.add(r);
rq.add(r);
if (lq.contains(r)) {
lq.remove(r);
rq.remove(r);
dq.add(r);
}
}
System.out.println(lq.size()+" "+rq.size());
for (int r : reserve) {
if (dq.contains(r)) {
continue;
}
int idx = 0;
while (idx < lq.size()) {
if (lq.isEmpty()) {
break;
}
int max = r+1;
int min = r-1;
int l = lq.poll();
if (l == max || l == min) {
System.out.println(r+"번 학생이 "+l+"번 학생에게 옷 빌려줌");
lq.remove(l);
cnt++;
break;
} else {
lq.add(l);
}
idx ++;
}
}
int s_cnt = n- set.size(); // 체육수업 무조건 듣는 학생 수
System.out.println(s_cnt+" + "+cnt);
answer = s_cnt + cnt;
return answer;
}
테스트 케이스 이거 통과하면 저게 안되고 저거 통과하면 이게 안되고 해서 꽤 오래 시간 붙잡은 문제..
각각 큐에 담고 중복인 값은 따로 빼서 저장해놓았다 그리고 반복문을 돌려서 빌려줄 수 있으면 카운팅을 올리고 큐에서는 빼줬다 중복인 애들은 이미 처음에 카운팅 됐으니까 continue로 넘겨주고 확실히 체육수업을 듣는 애들과 합쳐서 리턴!
set은 딱 자기 체육복만 가져온 애들 수를 구하려고 사용했다 배운건 바로바로 써먹기 ~!!