pig07911   3년 전

위에꺼가 맞은거고 아래꺼가 틀린코드인데 둘의 차이는 마지막에

ans+=st.top() 랑 ans=ans+st.top() 이거인데 ans+=st.top()는 맞고 ans=ans+st.top()이거는 시간초과나는데 이유좀 알려주세요ㅠㅠ

shg9411   3년 전

+=연산은 ans.append(st.top())과 같이 실행되고,

ans = ans + st.top()은 ans+st.top()을 실행 후 ans에 새로 할당하는 것으로 알고있습니다.

bupjae   3년 전

대부분의 C++ 구현체에서

ans+=st.top(); 는

1) ans 의 여유 공간의 충분한지 확인한다

2) 충분하다면 ans 의 끝에 st.top() 를 추가한다

3) 충분하지 않다면 메모리를 메모리를 확보한 후 기존 ans 의 내용을 새로 확보한 메모리로 복사한 후 st.top() 를 추가한다.

이런식으로 동작할 가능성이 큽니다.   

   

반면 ans = ans + st.top(); 는

1) 새로운 string 객체를 만든다

2) 만든 객체에 ans를 복사한다

3) 만든 객체에 st.top() 를 추가한다

4) 결과물을 ans 에 대입한다

이런식으로 동작할 가능성이 큽니다.

   

즉, ans = ans + st.top(); 의 경우 메모리의 복사가 ans+=st.top(); 에 비해 훨씬 많이 발생하면서 시간 효율이 나빠지게 됩니다.   

pig07911   3년 전

감사합니다 형님들~~

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