문제접근
•
여벌이 있는 학생의 양옆에 도난 당한 학생이 있는지 검색
놓쳤던 부분
•
정렬을 하지 않으면 규칙적인 탐색이 아니라 최대가 나올 수 없다
•
여벌이 있는 학생 중에 도난 당한 학생은 다른 학생들에게 빌려줄 수 없는 상황이기 때문에 미리 제거
코드
KB
ms
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = n - lost.size();
vector<int>::iterator pos;
sort(lost.begin(), lost.end());
sort(reserve.begin(), reserve.end());
for (int i = 0; i < lost.size(); i++)
{
if ((pos = find(reserve.begin(), reserve.end(), lost[i])) != reserve.end())
{
answer++;
*pos = 0;
lost[i] = -1;
}
}
for (int i = 0; i < reserve.size(); i++)
{
if (reserve[i] != 0)
{
if ((pos = find(lost.begin(), lost.end(), reserve[i] - 1)) != lost.end())
{
answer++;
*pos = 0;
}
else if ((pos = find(lost.begin(), lost.end(), reserve[i] + 1)) != lost.end())
{
answer++;
*pos = 0;
}
}
}
return answer;
}
C++
복사