언어
체육복 여분이 있어도 도난을 당하다니
땅호720
2024. 2. 22. 14:27
def solution(n, lost, reserve):
# +1, -1의 학생에게만 빌려줄 수 있음
# 최대한 많은 학생이 빌려야 함
# 5, [2,4], [3] -> 한 명만 빌릴 수 있음
# reserve 학생들을 대상으로 -> -1, +1 번호에 lost 학생이 있는지 find -> lost에서 제거 (빌려줌!)
# 빌려줄 수 있는데 도난당한 학생은, 자기가 써야하므로 빌려줄 수 없음!
lost = set(lost)
reserve = set(reserve)
# 교집합 찾기
rem_set = lost & reserve
lost = lost - rem_set
reserve = reserve - rem_set
for reserveNum in reserve:
if reserveNum-1 in lost:
lost.remove(reserveNum-1)
elif reserveNum+1 in lost:
lost.remove(reserveNum+1)
answer = n - len(lost)
return answer
처음에는 lost 학생들을 대상으로 for문을 돌렸는데, 그러면 경우의 수를 고려하면서 복잡해졌다.
그래서 reserve 가능한 학생들을 대상으로 for문을 돌려서 lost 학생이 수업을 들을 수 있는지 여부를 체크했다!
그런데 또, 빌려줄 수 있는데 도난당하는 학생들이 있어서... set 이용으로 바꿔주었다.
그리고 remove 대신 discard를 사용하면 조건문을 달지 않고도 돌릴 수 있을까 싶었지만?
이렇게 되면 두 명에게 빌려주는 처리가 되어 오류가 발생했다..!