강의로 돌아가기
나는왜

나는 왜

못푸는가.
형들 도와줘.. 나 효율성 못하겠어
난 왜 이렇게 멍청한걸까

def solution(people, limit):
people.sort()

cnt=0


i=0

j=0
while(len(people)!=0):

    a=people[i]+people[len(people)-1-j]
    if(a>limit and (len(people)-1-j)!=i ):
        j=j+1
    else:
        cnt=cnt+1
        if(i!=(len(people)-1-j)):
            del people[len(people)-1-j]
            del people[i]
            j=0
        else:
            del people[len(people)-1-j]
            j=0   
return cnt
1 개의 답변

Python의 list에서 del을 실행하면 새로 index를 한 칸씩 옮겨야 해서 최악의 경우 O(n) 입니다. 제가 코드를 잘 이해하진 못했으나, O(n)에 가까운 del이 여러번 실행되는 코드 같습니다. 굳이 del을 하지 않도록 코드를 수정하거나, 제일 앞/뒤에서만 원소를 제거하는 방식으로 수정해보세요! (후자의 경우 deque 사용 권장)

# 문제의 코드들
...
del people[len(people)-1-j]
            del people[i]
...
del people[len(people)-1-j]
...
  • 나는왜

    형님 지금 봤읍니다 다시 풀고 나서 보니 제가 수정한 부분과 형님의 조언이 일치하는 걸 알게 되었습니다. 한단계 성장했습니다. 감사합니다 형님

    나는왜―2021.01.03 14:23
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.