wooooooogi   3년 전

안녕하세요. 

매번 질문만 올리게 되네요. 

제가 사용한 방법은, 먼저 arr과 arrb 리스트에 양배추가 있는 곳을 각각 1, True로 설정했습니다. 

그리고 이차원 배열을 탐색하며, 그 지점에 양배추가 있다면(+arr이 1일 때) 해당 지점과 상하좌우를 탐색합니다.

그리고 5개 지점 중 가장 큰 값을 t에 할당합니다.

만약 t가 1이라면, 해당 지점은 아직 벌레를 사용하지 않은 지점이기에 벌레 값인 res를 1 증가시켜 줍니다. 그리고 t값을 1이 아닌 다른 값으로 설정해줍니다. 이 때 만약 상하좌우에 1인 값이 있다면, 이 값도 똑같이 t로 설정해줍니다. 

이렇게 모든 배열을 탐색하면 필요한 벌레의 수가 나오게 됩니다.

제가 손으로 그린 경우, 문제 예제 입력은 모두 만족했으나 코드에 오류가 있어 틀렸다고 나오는 거 같습니다.

혹시 반례나, 코드 오류를 알려주실 수 있나요? 감사합니다. 

plan222   3년 전

반례는 U자 모양 입니다.


단순히 상하좌우 살펴보고 끝이나면 연결된 구간을 모두 탐색 할 수 없습니다.

DFS, BFS에 대해 검색해서 알아보세요.


wooooooogi   3년 전

@plan222

답변 감사합니다. 

U자에 대한 예외코드를 작성해봤으나 U가 2개 이상 겹쳐있을 때 또 작동하지 않아 스파게티 코드가 되어 그냥 탐색 알고리즘으로 작성하도록 하겠습니다. 감사합니다 ㅎㅎ

많은 도움이 되었습니다.

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