문제 설명
전체 학생 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 반환하는 문제입니다.
문제 풀이
제한사항
전체 학생의 수 - 체육복이 없으면서 다른 학생에게 빌릴 수 없는 학생의 수를 구해야 합니다.
학생 1번과 3번이 체육복이 없고, 2번이 여벌의 체육복이 있을 때 2번 학생은 1번 또는 3번 학생 1명에게만 빌려줄 수 있습니다.
여벌의 체육복을 가진 학생이 도난당한 학생이면 reserve에서 먼저 제외시킵니다.
그리고 여벌의 체육복을 가진 학생이 다른 학생에게 빌려줬으면 빌린 학생은 lost에서 제외시킵니다.
그리고 전체 학생 n - lost의 크기만큼 빼면 수업을 들을 수 있는 학생 수를 구할 수 있습니다.
제출 코드
using System;
using System.Collections;
using System.Collections.Generic;
public class Solution {
public int solution(int n, int[] lost, int[] reserve) {
List<int> lostList = new List<int>(lost);
List<int> reserveList = new List<int>(reserve);
lostList.Sort();
reserveList.Sort();
List<int> tempList = new List<int>(reserveList);
for (int i = 0; i < tempList.Count; i++)
{
if (lostList.Contains(tempList[i]))
{
lostList.Remove(tempList[i]);
reserveList.Remove(tempList[i]);
}
}
for (int i = 0; i < reserveList.Count; i++)
{
if (lostList.Contains(reserveList[i] - 1))
{
lostList.Remove(reserveList[i] - 1);
continue;
}
if (lostList.Contains(reserveList[i] + 1))
{
lostList.Remove(reserveList[i] + 1);
continue;
}
}
return n - lostList.Count;
}
}