def solution(n, lost, reserve):
answer = 0
newReserve =[]
for r in reserve:
if r not in lost: # 잃어버린 학생이 아닐 때
newReserve.append(r)
else : # 잃어버린 학생이면 수업을 들을 수 있음
lost.remove(r)
for l in lost: # 잃어버린 학생들 중에
n-=1 # 전체 학생 중에서 잃어버린 수 만큼 빼기
if newReserve.count(l+1)!=0 : # 잃어버린 애 뒷번호가 빌려줄 수 있다.
answer+=1 # 수업 듣는 학생 추가
newReserve.remove(l+1) # 빌려줬음
elif newReserve.count(l-1)!=0: # 잃어버린 애 앞번호가 빌려줄 수 있다.
answer+=1 # 수업 듣는 학생 추가
newReserve.remove(l-1) # 빌려줬음
return n+answer
def solution(n, lost, reserve):
lost.sort()
reserve.sort()
for l in lost:
n-=1
if l in reserve: # 잃어버렸지만 여분이 있음
n+=1
# 이 아래 -> 잃어버렸고, 여분도 없음
elif l-1 in reserve and l-1 not in lost:
# 잃어버린 번호 앞번호가 빌려줄 수 있다. 그치만 잃어버린 애가 아니어야 함
n+=1
reserve.remove(l-1) # 빌려줌
elif l+1 in reserve and l+1 not in lost:
# 잃어버린 번호 뒷번호가 빌려줄 수 있다. 그치만 잃어버린 애가 아니어야 함
n+=1
reserve.remove(l+1) # 빌려줌
return n
실패 log
일단.. 무슨 이유인지 모르겠다... 22.1.18..
sort()를 둘다 해주고 i-1부터 하니 모든 태케를 통과했다. 22.1.19
def solution(n, lost, reserve):
new_lost = set(lost) - set(reserve)
new_reserve = set(reserve) - set(lost)
for i in new_lost:
if i - 1 in new_reserve:
new_reserve.remove(i - 1)
continue
elif i + 1 in new_reserve:
new_reserve.remove(i + 1)
else:
n-=1
return n
가장 깔끔해보였다. set으로 만들면 알아서 sort되니 sort가 추가로 요하지도 않는다.
여기에 굳이 remove로 O(n)을 소비하지 않아도 되는 것을 알았다.
def solution(n, lost, reserve):
new_lost = set(lost) - set(reserve)
new_reserve = set(reserve) - set(lost)
for i in new_lost:
if i - 1 in new_reserve:
new_reserve-={i - 1}
elif i + 1 in new_reserve:
new_reserve-={i+1}
else:
n-=1
return n
set-={원소} 하면 사라진다. 집합끼리 빼는 거니깐 당연히 가능하다.