* dfs를 이용하여 1로 이루어진 그룹을 라벨링한다. (그룹에 몇 개의 1이 있는지 labelCnt[]에 저장한다)
* 현재 좌표의 값이 1이고, 상 하 좌 우 인접한 값이 0인 좌표를 중심으로 탐색을 한다.
인접한 좌표에 0이 있다면 이 값을 1로 바꾸고 다른 그룹들과 합쳐질 수 있다. -> 이를 가능하게 하려면, 0인 좌표의 인접한 칸에 다른 그룹이 있어야 한다.
* 만약, 0인 좌표가 다른 그룹과 인접해 있다면 (연합 그룹을 형성하는 1의 개수와 현재 그룹의 개수 +1 )의 최대값이 정답이 된다.
* 주의해야 할 점은, 0이 같은 그룹으로 이루어진 1들로 둘러싸여져있을 수 있기 때문에 중복으로 더해주는 것을 방지해야 한다.
(set에 그룹의 라벨을 넣어주어서 중복으로 세지 않도록 하였다. )
1 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 0 | 2 | 0 | 0 |
0 | 2 | 2 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
'BOJ > C++' 카테고리의 다른 글
[BOJ] 17085. 십자가 2개 놓기 (0) | 2020.04.20 |
---|---|
[BOJ] 16939. 2X2X2 큐브 (0) | 2020.04.20 |
[BOJ] 17822. 원판 돌리기 (0) | 2020.04.19 |
[BOJ] 16918. 봄버맨 (0) | 2020.04.17 |
[BOJ] 9328. 열쇠 (0) | 2020.04.16 |