{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉BFS/DFS〉간척 한 칸으로 넓히는 부지← 이전다음 →
#041 · BFS/DFS어려움BFS/DFS

간척 한 칸으로 넓히는 부지

문제

해안 개발 공사는 갯벌 지대를 격자로 나눠 관리합니다. land[r][c]가 1이면 이미 매립이 끝난 육지, 0이면 아직 물에 잠긴 갯벌입니다. 가로·세로로 맞닿은 육지 칸들은 하나의 부지로 묶입니다 (대각선은 연결로 보지 않습니다).

이번 분기 예산으로는 갯벌 칸을 정확히 한 칸만 매립할 수 있습니다. 한 칸을 매립해 만들 수 있는 가장 넓은 부지의 칸 수를 반환하세요.

  • 어느 칸을 매립하든 지금보다 넓어지지 않는다면, 현재 가장 넓은 부지의 칸 수를 그대로 반환합니다.
  • 격자가 전부 육지라 매립할 갯벌이 없다면 전체 칸 수를 반환합니다.
function solution(land: number[][]): number

예시

land 반환
[[1,1,0,0],[0,1,0,1],[0,0,1,1]] 7
[[0,0,0],[0,0,0]] 1
[[1,1,1],[1,1,1]] 6
[[1,0,1,0],[1,0,1,0],[0,0,0,1]] 5

첫 번째 예시에서 (1,2) 칸을 매립하면 왼쪽 위 3칸 부지와 오른쪽 아래 3칸 부지가 이어져 매립한 칸을 포함해 7칸이 됩니다.

네 번째 예시에서는 (0,1) 또는 (1,1)을 매립해 세로 2칸짜리 부지 둘을 이으면 5칸이 최대입니다.

제약 조건

  • 1 ≤ land.length ≤ 60
  • 1 ≤ land[0].length ≤ 60
  • 모든 행의 길이는 같습니다 (격자가 정사각형이 아닐 수 있습니다)
  • land[r][c]는 0 또는 1

시간 복잡도 목표: O(R × C)

공간 복잡도 목표: O(R × C)

테스트 케이스

예시 1: 3×4 격자에서 3칸 부지 둘을 이어 7칸
입력: land = [[1,1,0,0],[0,1,0,1],[0,0,1,1]]
출력: 7
예시 2: 전부 갯벌 → 한 칸 매립해 1칸
입력: land = [[0,0,0],[0,0,0]]
출력: 1
예시 3: 전부 육지 → 전체 칸 수 6
입력: land = [[1,1,1],[1,1,1]]
출력: 6
예시 4: 세로 2칸 부지 둘을 이어 5칸
입력: land = [[1,0,1,0],[1,0,1,0],[0,0,0,1]]
출력: 5
가운데 구멍을 메워 격자 전체가 하나의 부지
입력: land = [[1,1,1],[1,0,1],[1,1,1]]
출력: 9
4×2 세로 격자, 어긋난 두 부지를 이어 5칸
입력: land = [[1,0],[1,0],[0,1],[0,1]]
출력: 5
엣지: 1×1 갯벌
입력: land = [[0]]
출력: 1
엣지: 1×1 육지 (매립할 갯벌 없음)
입력: land = [[1]]
출력: 1
solution.ts
에디터 로딩 중…

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