def solution(n, lost, reserve): only_lost = set(lost) - set(reserve) only_reserve = set(reserve) - set(lost) # 옷이 여벌로 있는사람과 옷을 도난당한 사람의 중복을 제거 cnt = 0 for i in only_lost: cnt_true = True # 옷을 빌렸는지 체크하기 위해서 cnt_true를 True로 잡아준다 for j in only_reserve: # 옷을 도난당한사람에 앞번호 뒷번호를 사람이 옷을 여벌로 가지고 있으면 # cnt_true를 False로 바꿔준다 if i-1 == j or i+1 == j: cnt_true = False # 옷을 빌려줬다면 옷을 빌려준 사람은 set에서 빼준다 only_reserve.remove(j) break if cnt_true == True: 옷을 만약에 빌리지 못했다면 cnt에 1을 더해준다 cnt += 1 # 전체 인원에서 옷을 빌리지 못한 사람을 빼준다 return n - cnt
이 문제의 가장큰 함정은 옷을 여벌로 가지고 있는 사람이 옷을 도난 당할수 있는 상황도 겹친다는 것이기 때문에 set을 이용해서 옷을 가져온사람과 옷을 도난당한사람이 중복되지 않게 정리를 하고 옷을 빌려준 사람은 set에서 빼주어야 정확하게 값을 구할수가 있다.