간단히 체육복 개수를 체크해주고 체육복이 없다면 양옆을 확인해서 가져와 주면 된다. 학생수가 2-30명이어서 배열을 32의 크기로 고정해서 양옆 배열이 존재하는지의 체크를 하지않고 코드를 짜도 괜찮을것 같아보인다.
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve)
{
int answer = 0;
vector<int> v(n,1);
for(auto c : reserve) v[c-1]++;//여분++
for(auto c : lost) v[c-1]--;//도난--
for(int i=0;i<n;i++)
{
if(v[i] == 0)
{
if(i > 0 && v[i-1] > 1)
{//앞번호가 여분이 있으면
v[i]++; v[i-1]--;
}
else if(i < n-1 && v[i+1] > 1)
{//뒷번호가 여분이 있으면
v[i]++; v[i+1]--;
}
}
}
for(auto c : v) if(c) answer++;//체육복있으면
return answer;
}