문제설명
입출력 예
내 문제 풀이
def solution(n, lost, reserve):
answer = 0
lost.sort()
lost_dif = list(set(lost).difference(reserve))
reserve_dif = list(set(reserve).difference(lost))
lost_n = len(lost_dif)
for i in lost_dif:
if (i-1) in reserve_dif:
lost_n -= 1
reserve_dif.remove(i-1)
elif (i+1) in reserve_dif:
lost_n -= 1
reserve_dif.remove(i+1)
answer = n - lost_n
return answer
- lost 학생의 앞뒤에 여벌의 체육복이 있는 학생이 있는지 확인
- 여벌의 체육복이 있는 학생이 있으면 그 학생은 reserve 배열에서 제거하고 체육복을 빌린 학생 또한 lost 배열에서 제거
- n - size(lost) 값을 리턴
- 처음에는 위와 같이 알고리즘을 짜고 실행을 하였지만 채점을 통과하지 못했다.
- lost list가 정렬되지 않은 상태로 주어졌을 경우와 체육복을 도난 당한 학생이 여벌의 체육복을 가지고 있을 경우를 고려하지 않았기 때문이다.
- lost.sort()
- lost_dif = list(set(lost).difference(reserve)) # lost와 reserve의 차집합
reserve_dif = list(set(reserve).difference(lost)) # lost와 reserve의 차집합