{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉BFS/DFS〉합병 후보 칸 세기← 이전다음 →
#092 · BFS/DFS어려움BFS/DFS (섬 라벨링 + 인접 후처리)

합병 후보 칸 세기

문제

0과 1로 이루어진 2차원 격자가 주어집니다. 1은 땅, 0은 바다이며, 상하좌우로 연결된 땅들은 같은 섬을 이룹니다.

어느 도시 계획팀이 바다(0) 한 칸을 매립해 땅(1)으로 바꾸려 합니다. 어떤 0칸을 매립했을 때, 그 칸을 매개로 서로 다른 섬이 2개 이상 하나로 합쳐진다면 그 칸을 "합병 후보 칸" 이라고 부릅니다.

매립 가능한 "합병 후보 칸" 의 개수를 반환하세요. (실제로 매립하지는 않습니다. 각 0칸을 독립적으로 판단합니다.)

예시

grid = [
  [1,0,1]
] → 1
(가운데 0칸이 좌·우 두 섬을 잇는다 → 합병 후보 1개)
 
grid = [
  [1,1,1],
  [1,0,1],
  [1,1,1]
] → 0
(둘레가 전부 연결된 섬 1개뿐. 가운데 0칸을 매립해도
 닿는 섬은 한 종류라 합병이 일어나지 않음 → 0개)

제약 조건

  • 1 ≤ grid.length, grid[0].length ≤ 50
  • grid[i][j]는 0 또는 1

시간 복잡도 목표: O(N × M)

공간 복잡도 목표: O(N × M)

테스트 케이스

예시 1: 네 모서리 섬, 변 중앙 0 네 개가 각각 두 섬 이음 → 4
입력: input = [[1,0,1],[0,0,0],[1,0,1]]
출력: 4
예시 2: 가운데 0이 좌우 섬 연결 → 1
입력: input = [[1,0,1]]
출력: 1
예시 3: 가운데 세로 0 두 칸 각각 좌우 잇기 → 2
입력: input = [[1,0,1],[1,0,1]]
출력: 2
예시 4: 십자 중앙 섬, 네 변 중앙 0이 양옆 섬 이음 → 4
입력: input = [[1,0,1],[0,1,0],[1,0,1]]
출력: 4
예시 5: 모두 1 (0 없음) → 0
입력: input = [[1,1],[1,1]]
출력: 0
예시 6: 모두 0 (섬 없음) → 0
입력: input = [[0,0,0],[0,0,0]]
출력: 0
예시 7: 체스판 패턴, 모든 0칸이 2개 이상 독립 섬에 닿음 → 8
입력: input = [[1,0,1,0],[0,1,0,1],[1,0,1,0],[0,1,0,1]]
출력: 8
예시 8: 도넛 (섬 1개) → 0
입력: input = [[1,1,1],[1,0,1],[1,1,1]]
출력: 0
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.