lucian0910   5년 전

제가 사용한 방법은

 copy map을 따로 만들어서 그 map 부분에만 bfs 돌리다가 먹을 것을 발견하면 bfs 빠져나가서 그 위치 값을 원래 map에 저장하고 이렇게 queue가 아예 빌 때까지 반복하는 식으로 알고리즘을 수행했는데 시간초과가 뜹니다. 어떤 부분에서 최적화가 이뤄져야 하는지 정보 부탁드립니다...

djm03178   5년 전

모든 BFS는 반드시 방문 체크를 해야 합니다. 방문 체크를 하지 않으면 같은 좌표가 큐에 중복으로 들어가게 되고, 이것이 반복되면 시간복잡도가 지수 형태가 됩니다.

lucian0910   5년 전

방문을 했을 경우

copy[tmp.point.y][tmp.point.x] = INT_MAX; 로 바꾸어서 이미 지나간 부분이라 체크를 했다고 생각하는데 이 부분이 틀린 것인가요?

djm03178   5년 전

다시 보니 방문 체크는 하셨네요.

문제는 상어가 9까지 크기가 커진 이후 올바르게 판단을 하지 못하고 무한 루프를 돌게 됩니다.

시간 초과의 원인은 최적화의 문제 뿐만 아니라 이처럼 무한루프를 도는 경우가 오히려 더 많으니 효율성만 생각해서는 안 됩니다.

lucian0910   5년 전

아... 그 부분 해결하니깐 바로 성공 떴습니다. 시간초과는 최적화의 문제로만 생각했는데 그게 아니였군요. 감사합니다!

wlsgk0323   5년 전

위 케이스의 무한루프 어떻게 해결하셨나요?

lucian0910   4년 전

그냥 몸무게를 7이상 늘리지 않게 해서 풀었습니다.

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