ckdgnsl1002   2년 전

푸는 방법은 주석에 나와있는대로 입니다.

1. 일단 BFS로 안뚫어도 도달은 하는지, 아니면 안뚫으면 못가는지를 확인하고, 그때까지의 방문한 위치 visited 리스트를 반환합니다.

2. 안 뚫으면 못가는 경우

갔던 모든길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있으며, 갔던 길이 아닌 경우가 있으면  3. 그 벽을 뚫은 새로운 maze를 생성한다.

3. 안뚫어도 성공한 경우

갔던 모든 길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있고, 갔던 길이라면 +) 둘러쌓여서 간적없는 곳이라면 하나만 뚫어서는 소용이 없기때문. 3. 현재의 길과 너머의 길의 숫자차이를 기록하고, (가장 큰 값 - 2) 만큼 원래 답에서 뺀다.

안뚫어도 성공한 경우의 2번 논리에서 무언가 문제가 있을 것 같은 느낌인데, 구체적으로 파악이 안됩니다...

반례들은 이곳저곳에서 찾아서 해봤는데 다 되었습니다.

Green55   2년 전

틀린곳을 고쳐도 2. 안 뚫으면 못가는 경우 에서 최악의 경우 O(NM)개의 미로를 만들어봐야해서 시간 내에 돌아갈 수 없을것 같습니다.

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