오류에 대한 지적이나 질문, 토의 환영합니다. 자유롭게 댓글 남겨주세요!.!
def solution(n, lost, reserve):
students = [1] * (n+2)
for i in reserve:
students[i] += 1
for i in lost:
students[i] -= 1
for i in range(1, n+1):
if students[i] == 0:
if students[i-1] == 2:
students[i-1:i+1] = [1, 1]
elif students[i+1] == 2:
students[i:i+2] = [1, 1]
return len([i for i in students[1:-1] if i > 0])
...
)에서 의 시간이 걸립니다.전체 학생 수는 매우 큰데, 여벌의 체육복을 가져온 학생은 매우 적다면?
reserve
를 정렬하고, 이것을 하나하나 순서대로 확인하며 처리해야합니다.def solution(n, lost, reserve):
s = set(lost) & set(reserve)
l = set(lost) - s
r = set(reserve) - s
for i in sorted(r):
if i-1 in l:
l.remove(i-1)
elif i+1 in l:
l.remove(i+1)
return n - len(l)
sorted(r)
)해야 하기 때문에for
반복문이 r
의 수 만큼 반복하기 때문에 입니다.l
을 해시 set()
으로 만들었기 때문에 접근(if i-1 in l:
)하고 삭제하는(l.remove(i-1)) 시간은 입니다.def solution(n, lost, reserve):
answer = n
lost.sort()
losts = lost.copy()
for stu in lost:
if stu in reserve:
reserve.remove(stu)
losts.remove(stu)
for stu in losts:
if stu-1 in reserve:
reserve.remove(stu-1)
elif stu+1 in reserve:
reserve.remove(stu+1)
else:
answer -= 1
return answer
lost
를 정렬할 때 의 시간이 걸립니다.for stu in lost:
, ) if stu in reserve:
, ), reserve.remove(stu-1)
, )하는 과정에서 모두 얽혀있기 때문에 의 시간이 걸립니다.이 글은 프로그래머스 스쿨 인공지능 데브코스 과정에서 공부한 내용을 바탕으로 정리한 글입니다.