def solution(n, lost, reserve):
answer = n - len(lost)
for i in reserve[:]: #여벌의 체육복을 가진 학생이 도난당했을 때는 본인이 사용
if i in lost:
lost.remove(i)
reserve.remove(i)
answer += 1
for i in lost[:]: #빌릴 수 있는 체육복이 있는 학생들에게 순서대로 빌려줌
if i-1 in reserve:
lost.remove(i)
reserve.remove(i-1)
answer += 1
elif i+1 in reserve:
lost.remove(i)
reserve.remove(i+1)
answer += 1
return answer
for문을 돌리면서 리스트의 원소를 remove하니 for문이 끝까지 돌지 않아 오류가 났다. 원본 리스트의 사본을 만들어 for문을 돌리니 해결되었다. 리스트[:]를 통해 간단하게 리스트의 사본을 만들 수 있다.
for i in lst[:] #lst의 사본을 만들어 for문을 돌림
if 조건:
lst.remove(i) #원본인 lst에서 원소 제거
나는 처음에 빌릴 수 있는 체육복이 1개뿐인 학생과 2개인 학생의 경우를 나눠서 문제를 풀었는데 다른 사람의 풀이를 보니 그냥 처음부터 순서대로 체육복을 빌려줘도 답이 나왔다. 그래서 그렇게 수정했다. 또 나는 체육복을 빌려줄 때마다 answer에 1을 더해 답을 구했는데, 그냥 마지막에 answer = n-len(lost)로 답을 구하는 방법이 있었다.