문제접근
•
여벌이 있는 학생의 양옆에 도난 당한 학생이 있는지 검색
놓쳤던 부분
•
정렬을 하지 않으면 규칙적인 탐색이 아니라 최대가 나올 수 없다
•
여벌이 있는 학생 중에 도난 당한 학생은 다른 학생들에게 빌려줄 수 없는 상황이기 때문에 미리 제거
코드
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++
복사


