sta48   4년 전

예제 테스트케이스는 올바르게 통과하는데

시간초과 에 걸립니다

처음에 벡터를 이용해서 std 라이브러리 sort 시켰는데

시간초과가 나서 dequeue 이용하였고,

- 번식한 나이1 나무들은 push_front()

- 1살씩 나이가 증가하는 나무들은 push_back()

하도록 구현하여

나이가 가장 적은 나무들이 먼저 양분을 먹도록 구현하였습니다


정렬 부분을 제외시켰는데도 시간초과가 났는데

혹시 tuple 사용으로 인해 복잡도가 올라간걸까요?

나무 구조체를 사용하나 tuple을 사용하나

메모리 사용량의 차이일 뿐

복잡도는 똑같을 것이라고 생각하여

tuple로 구성하였거든요


아니면

Line 109, 114, 124, 129 처럼

각 함수 내에서 Global로 선언한 queue나 dequeue를 최신화 시키는 부분에

대입연산으로 인해 복잡도가 올라간걸까요?




bupjae   4년 전

dequeue 대입연산 (= 데이터 전체 복사) 이 생각보다 시간을 많이 소모한 것으로 보입니다.

이 프로그램에서 대입연산의 횟수를 최소화하도록 수정한 후 제출한 코드가 '맞았습니다'를 받았습니다.

  

109번째 줄에서, 데이터 전체 복사하는 것 보다는 q와 res가 들고 있는 내용을 서로 바꾸는 것이 더 효율적입니다.

q.swap(res) 를 사용해 보세요.

  

summer 함수에서는 res = dead 로 복사한 후 res 의 원소를 순서대로 삭제만 했을 뿐 다른 조작을 하지 않은 채로 

dead = res 로 비어있는 res 를 dead 로 복사하고 있습니다.

이 경우는 res 를 사용할 필요 없이 dead를 직접 이용할 수 있습니다.

  

fall 함수에서는 tmp 에 복사한 후 tmp의 내용에 따라 q 의 내용이 달라지고 있습니다.

이 경우에는 복사를 피하는 방법이 없지는 않지만 적용하기 매우 까다로우므로 그냥 냅두는 것이 좋을 것 같습니다.

sta48   3년 전

감사합니다 spring 함수에서

swap함수를 사용하니 바로 해결됐어요

아무래도 최악의 경우에서

복잡도가 크게 올라갔었나봐요

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