copy 시 배열범위를 초과하는 접근으로 UB가 발생하여 시간초과 현상이 떴었습니다.
아래와 같이 수정하여 정답처리 됐습니다.
129줄의 memcpy를 통해 해보니 틀렸습니다가 뜨네요.
128줄과 129줄 같은 동작을 하는 것 아닌가요?
어느 부분에서 놓치고 있는지 모르겠습니다.
12100번 - 2048 (Easy)
map이 int 21개 배열을 가리키는 포인터이기 때문에 sizeof(map)이 8이 될 것으로 예상됩니다. 저렇게 함수로 전달할 때 sizeof는 map의 실제 유효한 크기를 계산할 수 없습니다.
sizeof(next_map)으로 하면 잘 동작하리라 생각합니다.
댓글을 작성하려면 로그인해야 합니다.
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
이렇게 계산이 되어서 시간초과 문제는 없을 거라고 생각했는데 시간초과가 나네요..
제가 계산한 방식이 잘못된거 같지만 뭐가 잘못됐는지 잘모르겠습니다.
가르쳐주시면 감사하겠습니다.