kiasu93   5년 전

질문을 위해 코드에 주석처리를 했습니다

기본적으로 dfs 탐색을 이용하여 벽을 설치할 위치를 3개 선택하고 

3개가 선택되는 순간마다 바이러스확장을 위해 bfs탐색을 했습니다

뭔가 잘못되었는지 30퍼센트에서 조금더 올라가다가 틀렸습니다가 뜨네요 ㅠ

일단 예제는 모두 맞는 출력값이 나옵니다

반례가 있을까요???

AdcKi   5년 전

if (a == n - 1 && b == m - 1)
return;
이 코드를 주석처리하면 AC가 나옵니다. DFS돌릴때 작성하신 코드대로라면 굳이 좌표를 넘겨서 연산할게 없으니 돌리면 되고

wall이 3보다 크게 dfs돌수도 없고 for문으로 순회하기에 좌표를 벗어 나지도 않습니다.

만약 a,b 넘겨서 loop를 줄이고 싶다면 for문 초기값과 call값만 수정 해주면 되겠네요.


kiasu93   5년 전

와...주석처리하니까 정말 되는군요 .. 

그런데 어차피 for문으로 탐색하기때 문에 범위를 넘을 일이 없는데

왜 저 문장때문에 틀렸던 걸까요???

AdcKi   5년 전

wall의 값이 몇인지 상관없이 마지막에 dfs호출위치 -> 1을 넣은 위치가 배열의 마지막 값이면 무조건 종료됩니다.

그래서 배열의 마지막 값이 벽을 세워야 최적해가 나오는 상황이라면 해당 상황을 연산하지 않겠지요.

kiasu93   5년 전

친절한 댓글 정말 감사합니다 (꾸벅)

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