lycoris1600   2년 전

숏코딩을 하기 위해 코드를 이것저것 손보는 중이었는데 41912217번 제출은 통과하면서 41918500번 제출은 통과가 안되고 시간초과가 뜨더라고요

앞부분은 전부 똑같고, 제일 뒷부분만

41912217번(AC)

while n:
 if d[n]==m:a+=[l[n-1]];m-=1
 n-=1
print(*a[::-1])

41918500번(TLE)

while n:
 if d[n]==m:a=[l[n-1]]+a;m-=1
 n-=1
print(*a)

이렇게 구성했는데 시간이 상당히 차이가 나는 것 같습니다.

push와 add의 차이일까 싶어 41946039번에서 a+=[l[n-1]]를 a=a+[l[n-1]]로 바꾸어 제출해 보았는데 이 역시 시간초과가 뜹니다.

41946039번(TLE)

while n:
 if d[n]==m:a=a+[l[n-1]];m-=1
 n-=1
print(*a[::-1])

이러한 차이가 발생하게 되는 이유가 뭔가요?

djm03178   2년 전

+=은 기존의 리스트 객체 자체에 원소를 덧붙이는 역할을 합니다.

= +는 기존의 리스트를 복사하여 새로운 리스트 객체를 만들고, 거기에 원소를 덧붙인 뒤 그 레퍼런스를 대입하는 역할입니다.

댓글을 작성하려면 로그인해야 합니다.