saurus2
Saurus2
saurus2
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발
      • AJAX
    • ML Ops
    • Profile
    • 음식점
    • 배낭여행
    • 컴퓨터공학
      • 알고리즘 공부
      • C++
      • Sever 스터디
      • Java spring
      • 알고리즘 _ 문제해결
      • 딥러닝
      • Java 정리
      • Python
      • LeetCode 1000
      • Machine Learning Study
      • Sign language Detection Pro..
      • LeetCode Solutions
    • 비콘
    • 데일리 리포트
    • 유학일기
      • 영어 공부
      • Daily
    • AI Master Degree
      • Data Mining
      • AI and Data engineering
      • Math Foundations for Decisi..
      • Natural Language Processing

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 릿코드
  • 딕셔너리
  • LeetCode
  • DFS
  • 개발자
  • 알고리즘
  • 딥러닝
  • Python
  • 파이썬
  • 취준
  • 리트코드
  • two pointer
  • 문제해결능력
  • c++
  • 온라인저지
  • BFS
  • 취업준비
  • 알고리즘문제해결
  • 백준
  • 개발자 취업준비

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
saurus2

Saurus2

컴퓨터공학/LeetCode 1000

[LeetCode] 200. Number of Islands 파이썬 Medium

2021. 10. 31. 08:21

200. Number of Islands

문제 해석:

2차원 바이너리 그리드에서 1은 땅이고 0은 물이다.
그렇다면 이어져있는 땅의 갯수를 세어야한다.

문제 해설:

1. BFS를 진행해서 이어져있는 섬들을 찾아야한다.
2. BFS를 실행하면 모든 이어진 섬을 찾을 수 있는데, 떨어져있는 섬이 존재할 수도 있다.
3. 2중 for문을 사용해서 모든 그리드의 섬을 하나씩 확인해봐야한다.
4. 그리드 리스트에 들어가있는 숫자가 문자라서 그부분을 조심하자.

Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands.

An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

 

Example 1:

Input: grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] Output: 1

Example 2:

Input: grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] Output: 3

 

Constraints:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] is '0' or '1'.

 

해설 코드

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        ans = 0
        # 큐는 리스트로 사용
        q = []
        m = len(grid)
        n = len(grid[0])
        # BFS 방문 배열 생성
        visited = [[0] * n for _ in range(m)]
        dir = [
            [1,0],
            [0,1],
            [-1,0],
            [0,-1]
        ]
        # 모든 칸을 확인해서 시작점으로 잡아야함
        for y in range(m):
            for x in range(n):
            	# 섬이 아니거나, 방문했다면 스킵
                if grid[y][x] == "0":
                    continue
                if visited[y][x] == 1: 
                    continue
                q.append([y, x])
                visited[y][x] = 1
                # BFS 시작이라면 그곳은 방문하지 않은 섬, 카운트 시작
                ans += 1
                # BFS 시작
                while(q):
                    curNode = q.pop()
                    for i in range(4):
                        nxtY = curNode[0] + dir[i][0]
                        nxtX = curNode[1] + dir[i][1]
                        if nxtY >= m or nxtX >=n or nxtY < 0 or nxtX < 0:
                            continue
                        if visited[nxtY][nxtX] == 1:
                            continue
                        if grid[nxtY][nxtX] == "0":
                            continue
                        visited[nxtY][nxtX] = 1
                        q.append([nxtY,nxtX])
        return ans

'컴퓨터공학 > LeetCode 1000' 카테고리의 다른 글

[leedCode] 7. Reverse Integer 파이썬 Medium  (0) 2021.11.02
[LeedCode] 2. Add Two Numbers 파이썬 Medium  (0) 2021.11.02
[LeedCode] 56. Merge Intervals 파이썬 Medium  (0) 2021.10.31
[LeetCode] 1710. Maximum Units on a Truck 파이썬 easy 정렬  (0) 2021.10.30
[LeetCode] 937. Reorder Data in Log Files - Easy 파이썬 sorted key 함수  (0) 2021.10.30
    '컴퓨터공학/LeetCode 1000' 카테고리의 다른 글
    • [leedCode] 7. Reverse Integer 파이썬 Medium
    • [LeedCode] 2. Add Two Numbers 파이썬 Medium
    • [LeedCode] 56. Merge Intervals 파이썬 Medium
    • [LeetCode] 1710. Maximum Units on a Truck 파이썬 easy 정렬
    saurus2
    saurus2
    Simple is Best

    티스토리툴바