https://school.programmers.co.kr/learn/courses/30/lessons/42862
탐욕법(Greedy)
def solution(n, lost, reserve):
for r in reserve:
if r in lost:
lost.remove(r)
else:
if r-1 in lost:
lost.remove(r-1)
continue
elif r+1 in lost:
lost.remove(r+1)
return n - len(lost)
처음에 이런식으로 했는데, 몇 가지 케이스에서 오류 발생
아무리 생각해도 어디가 문제인지 파악을 못했는데
lost와 reserve에 중복되는 원소가 있을 때의 처리가 완벽하지 않은 것 같았음
따라서, 아래처럼 set 끼리 연산으로 교집합을 제거하고 새로 list를 만듦
def solution(n, lost, reserve):
diff_lost = list(set(lost) - set(reserve))
diff_reserve = list(set(reserve) - set(lost))
for r in diff_reserve:
if r-1 in diff_lost:
diff_lost.remove(r-1)
continue
elif r+1 in diff_lost:
diff_lost.remove(r+1)
return n - len(diff_lost)
오류를 빨리 발견하지 못해서 시간이 너무 오래 걸림..