언어

체육복 여분이 있어도 도난을 당하다니

땅호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를 사용하면 조건문을 달지 않고도 돌릴 수 있을까 싶었지만?

이렇게 되면 두 명에게 빌려주는 처리가 되어 오류가 발생했다..!