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