bbwwpark   4년 전

제가 계산한 시간복잡도는 아래와 같습니다.

4방향으로 5번 작동하는 모든 경우의수 4^5 = 1024

작동하는 경우의 수마다 걸리는 시간 :  400(번119줄 - go 함수 2차원 매개변수 복사) + 1600(126번줄 - 4방향 탐색을 위한 2차원 배열 복사) + 800(8번줄 - moving 함수에서 moving, merge 각각 최대 400번 연산소요)

총 시간 복잡도 = 4방향으로 5번 작동하는 모든 경우의수 * 작동하는 경우의 수마다 걸리는 시간 = 1024 * 2800 = 2,867,200 

이렇게 계산이 되어서 시간초과 문제는 없을 거라고 생각했는데 시간초과가 나네요..

제가 계산한 방식이 잘못된거 같지만 뭐가 잘못됐는지 잘모르겠습니다.

가르쳐주시면 감사하겠습니다.

bbwwpark   4년 전

copy 시 배열범위를 초과하는 접근으로  UB가 발생하여 시간초과 현상이 떴었습니다.


아래와 같이 수정하여 정답처리 됐습니다.

129줄의 memcpy를 통해 해보니 틀렸습니다가 뜨네요. 

128줄과 129줄 같은 동작을 하는 것 아닌가요?


어느 부분에서 놓치고 있는지 모르겠습니다.

evenharder   4년 전

map이 int 21개 배열을 가리키는 포인터이기 때문에 sizeof(map)이 8이 될 것으로 예상됩니다. 저렇게 함수로 전달할 때 sizeof는 map의 실제 유효한 크기를 계산할 수 없습니다.

sizeof(next_map)으로 하면 잘 동작하리라 생각합니다.

bbwwpark   4년 전

@evenharder

감사합니다. 이해되었습니다.

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