def solution(n, lost, reserve):
set_reserve = set(reserve) - set(lost)
set_lost = set(lost) - set(reserve)
for i in set_reserve:
if i-1 in set_lost:
set_lost.remove(i-1)
elif i+1 in set_lost:
set_lost.remove(i+1)
return n - len(set_lost)
Level1 중에서 가장 생각을 많이 한 문제 인것 같다. 내가 푼 방법은 그리디 라기보단 구현에 가까워서 그리디로 푼 사람의 코드를 참고 했다.
문제의 키워드는 reserve와 lost 리스트는 서로 중복된게 있으면 안된다는 것이다. 따라서 set으로 분리하여 reserve에서 lost와 중복된 것을 뺀 set_reserve와 그 의 반대인 set_lost를 만든다. 그리고 set_reserve에서 양 옆에 수가 set_lost에 있다면 여별의 체육복을 나누어 줄 수 있으므로 그 수를 set_lost에서 제거시킨다. 그리고 전체 학생수에서 set_lost에 있는 리스트 수만을 빼면 답이 나온다.