https://leetcode.com/problems/max-area-of-island/description/
문제 분석
주어진 그리드에서 가장 큰 섬의 크기를 구하는 문제입니다.
처음 시도한 답안
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
m = len(grid)
n = len(grid[0])
dx = [1,0,-1,0]
dy = [0,1,0,-1]
answer = 0
for i in range(m):
for j in range(n):
if grid[i][j] == 1:
queue = [(i,j)]
grid[i][j] = 0
count = 1
while queue:
i, j = queue.pop(0)
for idx in range(4):
x = i + dx[idx]
y = j + dy[idx]
if x < 0 or y < 0 or x >= m or y >= n or grid[x][y] == 0:
continue
queue.append((x,y))
grid[x][y] = 0
count += 1
answer = max(answer, count)
return answer
접근 방법
- 이중 포문을 순회하면서 BFS 방식으로 섬을 순회합니다.
- 만약 등장한 지점이 1이라면 (섬이라면)
- 등장한 지점을 큐에 넣고 방문 처리를 합니다.
- count(섬의 크기)를 1로 설정한 후 이어진 섬들을 BFS로 방문합니다.
- 큐에서 해당 지점을 뺀 후 상하좌우로 방문이 가능한지 확인합니다.
- 방문이 가능하다면 해당 지점을 큐에 넣은 후 방문 처리를 합니다.
- 이 때 방문이 가능하기 때문에 섬의 크기를 1 증가합니다.
- 가장 큰 섬의 크기를 업데이트하기 위해 answer와 count중 큰 값을 answer로 정합니다.
이어져 있는 섬을 BFS로 탐색하고 섬의 최대 크기를 저장하면서 구하면 되는 문제입니다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[LeetCode]Find All Groups of Farmland (0) | 2024.04.12 |
---|---|
[LeetCode]Count Sub Islands (0) | 2024.04.11 |
[LeetCode]Valid Palindrome (2) | 2024.04.09 |
[LeetCode]Course Schedule (0) | 2024.04.08 |
[LeetCode]Number of Islands (0) | 2024.04.07 |