https://programmers.co.kr/learn/courses/30/lessons/42862

가장 최적으로 하려면.. 도난 당한 아이의 왼쪽부터 살펴봐야 한다고 생각했다.

도난 당한 배열도 작은수부터 시작해야겠지.

왼쪽부터 빌리면서, 없다면 오른쪽을 체크하고, 그마저도 안되면 도난 당한 애가 0벌을 가지고 있을 때 하나 빼주면 된다.

int solution(int n, vector<int> lost, vector<int> reserve) {
	int answer = 0;
	vector<int> save(n + 2, 1);
	save[0] = 0;
	save[n + 1] = 0;
	for (int i = 0; i < lost.size(); i++) {
		save[lost[i]]--;
	}
	for (int i = 0; i < reserve.size(); i++) {
		save[reserve[i]]++;
	}
	answer = n;
    sort(lost.begin(), lost.end());
	for (int i = 0; i < lost.size(); i++) {
		if (save[lost[i] - 1] == 2) { // 왼쪽 살피고
			save[lost[i] - 1]--;
		}
		else if (save[lost[i] + 1] == 2) {  // 오른쪽 살피고
			save[lost[i] + 1]--;
		}
		else {
			if(save[lost[i]] == 0)  // 도난당한애가 원래 2벌이었으면 1벌이 되었을 것이다.
				answer--;            // 1벌이라면 자기꺼 자기가 입으면된다. 0 이라면 빼주면된다.
		}
	}

	return answer;
}