*여벌을 가져온 학생이 도난당한 경우는, 일반 학생과 똑같기 때문에, lost와 reserve에서 set을 이용해 모두 제거해 준다.
둘다 오름차순으로 정렬.
cnt = 0, 빌린 학생 수
index = 0, 여분을 가진 학생의 index
for 잃어버린 학생 in lost:
return ( n - len(lost) + cnt) 전체학생 - 잃어버린 학생수 + 빌린 학생수
def solution(n, lost, reserve):
# 여벌이 있지만, 도둑맞은 친구는 두 리스트에서 모두 제거.
lost, reserve = list(set(lost) - set(reserve)), list(set(reserve)- set(lost))
# 두 리스트 모두 오름차순 정렬
lost.sort()
reserve.sort()
# 빌린 학생 수
cnt = 0
# 여분 있는 학생의 index
index = 0
for student in lost:
# 여분학생의 번호가 (잃어버린 학생 + 1) 이하가 아니라면
# 어차피 그 다음 여분학생에게도 못빌리기 때문에 (오름차순 정렬했으니) while문을 돌리지 않는다.
while index < len(reserve) and reserve[index] <= student+1:
if abs(reserve[index]-student) == 1:
index += 1
cnt += 1
break
index += 1
return (n - len(lost) + cnt)
def solution(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve:
f = r - 1
b = r + 1
if f in _lost:
_lost.remove(f)
elif b in _lost:
_lost.remove(b)
return n - len(_lost)