들어오는 데이터가 정렬되서 오는게 아니라서 정렬한 번 해줘야함.
def solution(n, lost, reserve):
answer = n
lost.sort()
reserve.sort()
for i in lost:
# 자기 자신이 여벌이 있을 때
if i in reserve:
reserve.remove(i)
# 1번 학생일 때
elif i == 1:
# 여벌을 가지고 왔어도 도둑맞아서 빌려줄 게 없을 경우 도 있음
if i + 1 in reserve and i + 1 not in lost:
reserve.remove(i + 1)
else:
answer -= 1
# 마지막 학생일 때
elif i == n:
if i - 1 in reserve:
reserve.remove(i - 1)
else:
answer -= 1
# 가운데 학생일 때
else:
if i - 1 in reserve:
reserve.remove(i - 1)
elif i + 1 in reserve and i + 1 not in lost:
reserve.remove(i + 1)
else:
answer -= 1
return answer
아래 처럼 하면 가독성이 올라감.
_reserve
에는 내가 가져왔지만 도둑 맞지 않아서 남을 빌려줄 수 있는 애들만 넣어주고
_lost
에는 도둑 맞았지만 여분을 가져와서 상관없는 애들을 제외해줌.
그러면 이제 예비를 가져온 애들을 기준으로 앞뒤에 잃어버린 애들이 있으면 빌려주고 걔들은 체육복을 받았으니 _lost
에서 빼줌.
이제 마지막에 _lost
에 남은 애들만 체육복을
def solution(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve:
f = r - 1
b = r + 1
if f in _lost:
_lost.remove(f)
elif b in _lost:
_lost.remove(b)
return n - len(_lost)
https://programmers.co.kr/learn/courses/30/lessons/42862?language=python3