문제
- 여벌 체육복이 있는 학생이 앞 번호나 뒷 번호 학생에게 체육복을 빌려줄 수 있다.
- 전체 학생 수 n, 체육복을 도난당한 학생들의 번호 배열 lost, 여벌 체육복을 가져온 학생의 번호 reserve가 있을 때 체육수업을 들을 수 있는 학생의 최댓값 구하기
- 여벌 체육복을 가져온 학생이 체육복을 도난당한 경우 다른 학생에게 체육복을 빌려줄 수 없다.
풀이
- 여벌 체육복을 가져온 학생이 체육복을 도난 당한 경우 제외
- 도난 당한 학생이 앞 번호 -> 뒷 번호 순으로 체육복 빌릴 수 있는지 확인
def solution(n, lost, reserve):
# 여벌 체육복을 가져온 학생이 체육복을 도난 당한 경우 제외
lost, reserve = set(lost) - set(reserve), set(reserve) - set(lost)
# 도난 당한 학생이 앞 번호 -> 뒷 번호 순으로 체육복 빌릴 수 있는지 확인
for num in sorted(list(lost)) :
if num-1 in reserve :
reserve.remove(num-1)
elif num+1 in reserve :
reserve.remove(num+1)
else:
n -= 1
return n
References