Number of Islands
지도는 길이가 같은 행들의 목록으로 주어집니다. 각 문자는 육지 칸인 1 또는 물 칸인 0입니다. 두 육지 칸은 하나가 다른 하나의 바로 위, 아래, 왼쪽 또는 오른쪽에 있을 때 같은 섬에 속합니다. 모서리만 맞닿은 칸은 연결되지 않습니다.
다음 지도를 살펴보세요: ["11000", "11000", "00100", "00011"]
- 왼쪽 위의 육지 칸 네 개가 하나의 섬을 이룹니다.
- 가운데 행의 한 칸은 첫 번째 섬과 모서리만 맞닿아 있으므로 두 번째 섬입니다.
- 오른쪽 아래의 두 칸은 세 번째 섬을 이룹니다.
따라서 지도에는 섬이 3개 있습니다.
지도는 실제로 그래프입니다. 각 육지 칸은 노드이고, 변은 변을 공유하는 두 육지 칸을 연결합니다. 섬의 개수를 세는 것은 그래프에서 연결된 구성 요소의 개수를 세는 것입니다. 아직 방문하지 않은 육지 칸을 찾을 때마다 새로운 섬을 발견한 것이므로, 다음으로 넘어가기 전에 그 섬 전체를 탐색합니다.
grid를 입력받는 numIslands라는 함수를 작성하세요. grid는 1(육지)과 0(물)로 이루어진 문자열 목록이며, 함수는 섬의 개수를 반환해야 합니다. 섬은 위, 아래, 왼쪽 또는 오른쪽으로 연결된 육지 칸들의 그룹입니다.
예를 들어, ["01110", "01000", "00011", "11001"]은 3을 반환합니다. 위쪽 행들에 있는 모양, 오른쪽의 그룹, 그리고 왼쪽 아래 모서리의 한 쌍이 각각 섬입니다.
제약 조건: 1 <= 행의 수, 열의 수 <= 150. 모든 행의 길이는 같습니다.
함수
- arg1string-array
- 반환값integer
예제
- 입력
- arg1 = ["11000", "11000", "00100", "00011"]
- 출력
- 3
- 입력
- arg1 = ["01110", "01000", "00011", "11001"]
- 출력
- 3
제출 시 숨은 테스트 +13개
힌트
하나씩 열어 보세요. 열 때마다 조금 더 알려 줍니다.
지도를 한 칸씩 살펴보세요. 이전에 어떤 섬도 차지하지 않은 육지 칸에 도달했을 때, 방금 새로운 섬을 몇 개 찾았나요?
새로운 섬을 찾으면, 그 섬과 연결된 모든 육지 칸을 방문해 각각을 방문한 것으로 표시하세요. 그러면 탐색 중 같은 섬을 다시 세지 않습니다.
- 방문해야 할 정사각형을 큐(너비 우선) 또는 명시적 스택(깊이 우선)으로 탐색하세요. 거대한 섬 하나로 이루어진 지도에서는 재귀 검색이 호출 스택을 모두 소진할 수 있지만, 직접 만든 큐나 스택을 사용하는 반복문은 그럴 수 없습니다.
이 문제의 전체 풀이가 곧 추가됩니다.
비슷한 문제
같은 아이디어를 쓰는 문제입니다. 두세 개를 풀면 패턴이 몸에 익습니다.
Python
def numIslands(grid):
# 여기에 코드를 작성하세요케이스 1
케이스 2
입력
arg1 = ["11000", "11000", "00100", "00011"]
기대값
3