그냥 union find 인 것 같네용...조금만 더 생각을!!
15875번 - Pineapple Farming
댓을 늦게 봤네용..
높이가 K일 때, 웅덩이를 판별하
는 것을 높이가 K-1일때 했던 것으로 커버할 수 있을까요?
이것이 UNION_FIND라고 생각한 이유는, 높이가 K-1일때 웅덩이들을 알아 두면, 그것을 높이가 K일 때로 확장하는데 쓸 수 있기 때문입니다
예제에서
K=3일 때는 위와 같이 되는데, 이를 K=4로 확장하면
즉, 칸중에서 높이가 4인 부분을 이전에 묶어주었던 것에 추가해주면 됩니다.
기본적으로 이 아이디어를 사용해주면 됩니다.
주의할 것은 노란색으로 묶은 부분이 웅덩이일 조건이 (밖의 테두리 부분에 칸들을 포함하지 않는것 OR 0인 원소와 이웃한 원소가 없는 것)임을 처리해주는 것입니다.
웅덩이의 크기는 UNION_FIND 할 때, par, siz, rnk 3개의 배열을 사용할 텐데, 여기서 siz배열로 알아보시면 될 것이고
각 칸의 높이는 1이상 109 이하인 것은, 각 칸들의 숫자를 모아 정렬해서 한칸씩 보는 것으로 해결할 수 있을 겁니다
이렇게 하시면 O(W*H*ack(W*H)) (? union find의 시간복잡도 계수가 뭐더라 편의상 ack()로 표현함) 으로 판별 가능합니다.
댓글을 작성하려면 로그인해야 합니다.
nlkey2022 5년 전
가장 가장자리 if (i == 1 || j == 1 || i == h || j == w)
부분은 무조건 웅덩이가 아닌것을 감안하면
웅덩이가 아닌 지역과 인접한 부분 중에 보다 높거나 같은 지역은 무조건 웅덩이가 아니므로 a[here.first][here.second] <= a[nx][ny]
bfs로 생각했으나..
9 12
5 5 5 5 5 5 5 5 5
5 2 2 2 2 2 2 2 5
5 2 9 9 9 9 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 6 6 6 9 2 5
5 2 9 9 9 9 9 2 5
5 2 2 2 2 2 2 2 5
5 5 5 5 5 5 5 5 5
이러한 반례가 있네요.. (웅덩이 안에 웅덩이)
어떻게 접근해야할지 모르겠습니다