def solution(n, lost, reserve):
more = []
lost = lost[::-1]; reserve=reserve[::-1]
reserve, lost = list(set(reserve)-set(lost)), list(set(lost)-set(reserve))
for i in reserve:
if i in lost:
lost.remove(i)
elif i+1 in lost:
if i-1 in lost:
more.append(i)
else:
lost.remove(i+1)
elif i-1 in lost:
lost.remove(i-1)
for i in more:
if i-1 in lost:
lost.remove(i-1)
elif i+1 in lost:
lost.remove(i+1)
answer = n - (len(lost))
return answer
풀이
여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
이 부분 때문에 오래 걸렸다. lost=[2,3], reserve = [3,4]일 때 3은 자기가 가진 여유분 옷을 입기 때문에 무조건 제거하고 시작해야된다는 건데, 내가 보기에는 4번이 3번한테 옷 빌려주고, 3번이 2번한테 옷을 빌려주면 5명 모두 수업할 수 있다고 해석을 했기 때문이지..
근데 제한 사항에서 저렇게 줘서 좀 헷갈리는 부분이 있었다.
그리고 처음에 같은 수를 제거하는 코드를 짤 때
reserve = list(set(reserve)-set(lost))
lost = list(set(lost)-set(reserve))
return reserve, lost
이렇게 짰는데, 이렇게 하면 reserve가 업데이트된 상태로 lost에 적용되어 오류가 발생했다 (으휴)