dequeue 대입연산 (= 데이터 전체 복사) 이 생각보다 시간을 많이 소모한 것으로 보입니다.
이 프로그램에서 대입연산의 횟수를 최소화하도록 수정한 후 제출한 코드가 '맞았습니다'를 받았습니다.
109번째 줄에서, 데이터 전체 복사하는 것 보다는 q와 res가 들고 있는 내용을 서로 바꾸는 것이 더 효율적입니다.
q.swap(res)
를 사용해 보세요.
summer 함수에서는 res = dead 로 복사한 후 res 의 원소를 순서대로 삭제만 했을 뿐 다른 조작을 하지 않은 채로
dead = res 로 비어있는 res 를 dead 로 복사하고 있습니다.
이 경우는 res 를 사용할 필요 없이 dead를 직접 이용할 수 있습니다.
fall 함수에서는 tmp 에 복사한 후 tmp의 내용에 따라 q 의 내용이 달라지고 있습니다.
이 경우에는 복사를 피하는 방법이 없지는 않지만 적용하기 매우 까다로우므로 그냥 냅두는 것이 좋을 것 같습니다.
sta48 4년 전
예제 테스트케이스는 올바르게 통과하는데
시간초과 에 걸립니다
처음에 벡터를 이용해서 std 라이브러리 sort 시켰는데
시간초과가 나서 dequeue 이용하였고,
- 번식한 나이1 나무들은 push_front()
- 1살씩 나이가 증가하는 나무들은 push_back()
하도록 구현하여
나이가 가장 적은 나무들이 먼저 양분을 먹도록 구현하였습니다
정렬 부분을 제외시켰는데도 시간초과가 났는데
혹시 tuple 사용으로 인해 복잡도가 올라간걸까요?
나무 구조체를 사용하나 tuple을 사용하나
메모리 사용량의 차이일 뿐
복잡도는 똑같을 것이라고 생각하여
tuple로 구성하였거든요
아니면
Line 109, 114, 124, 129 처럼
각 함수 내에서 Global로 선언한 queue나 dequeue를 최신화 시키는 부분에
대입연산으로 인해 복잡도가 올라간걸까요?