제한 사항을 주의하자.

여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

체육복이 존재하여 수업을 들을 수 있는 학생은 적어도 “n-lost.length”이다. 여기서 반복문을 통해 lost 배열에 있는 학생들을 작은 숫자를 먼저 확인하여 통과 시킨다.

Untitled

이때 자기 자신이 체육복을 도난 당한 경우는 다른 사람에게 체육복을 빌려줄 수 없으므로 앞선 반복문을 통과하기 전에 제거해준다.

풀이 코드

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;
    }
}