jrw9215   2년 전

노드클래스의 멤버필드 y,x는 각각 y, x좌표를

c는 걸린 시간, k는 벽을 부술 수 있는 횟수의 잔여량

d는 0이면 현재 노드가 낮의 상태를, 1이면 밤의 상태를 가짐을 나타냅니다.

visit배열은 4차원으로 선언했으며, visit[y][x][k][d]와 같이 접근할 수 있습니다.

전체적으로 동작을 설명하자면

1- 조건에 따라 상하좌우 4방향 및 정지해있을때의 상태를 큐에 추가합니다.

2- 만약 상하좌우로 탐색했을때 그 위치에 벽이 있고, 현재 낮이며, 벽을 부술수 있는 횟수가 남아있고

벽을 부수고 나서 반나절의 시간이 걸려 그곳에 도착한 적이 없었다면

벽 파괴 남은 횟수를 1 감소시키고, 걸린 시간은 증가시키며

nd = (n.d+1)%2와 같이 현재 낮(0)이면 밤(1)으로, 현재 밤이면 낮으로 변경되도록 설정된 변수를 사용해

그곳에 방문했음을 처리합니다.

3- 상하좌우 탐색시 그곳에 벽이 없고 반나절이 걸려 그곳에 도착한 적이 없었다면

방문했음을 처리합니다.

4- 상하좌우 탐색을 마치고, 현재 밤이고, 그곳에 반나절 머무른 적이 없으면

다시 한번 그 자리에 머무르도록 처리합니다.

로직자체는 얼추 맞는 것 같으나, 17%에서 시간초과가 발생합니다.

아무래도 방문배열이 4차원이여서라기 보다는, 제자리에 머무는 처리와 관련해서

문제가 있는 것 같은데, 정확한 원인은 잘 모르겠습니다.

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