살아가는 이유_EU
내가 살아가는 이유, 삶
살아가는 이유_EU
전체 방문자
오늘
어제
  • 삶 (159)
    • 이유's EATERY (16)
      • 맛집 (10)
      • 까페 (4)
      • 맛있는 Recipe (1)
    • 이유's LIFE (16)
      • 국내여행 (5)
      • 해외여행 (2)
      • 운동 (1)
      • 취업정보 (0)
      • 끄적끄적 (5)
      • 일기쟝 (3)
      • 세상 이야기 (0)
      • 결혼 준비 (0)
    • 이유's Programming (43)
      • JavaScript (6)
      • Java (7)
      • C++ (0)
      • DBMS (24)
      • Spring (3)
      • til (1)
      • HTTP (2)
    • 이유's REVIEW (13)
      • BOOK (6)
      • PROGRAM or MOVIE (5)
      • PRODUCT 제품리뷰 (2)
    • 이유's STUDY (31)
      • 수업 관련 (2)
      • IT 시사 (2)
      • IT NEWS (2)
      • IVIEW (0)
      • IOS 앱 만들기 (0)
      • 알고리즘 문제풀이 (23)
      • PM data literacy (2)
    • 이유's ENGLISH (13)
      • Writing about something! (12)
      • Feedback (1)
      • TIL (0)
    • 이유's DB 공부 (1)
      • MySQL DB (0)
      • Postgre (1)
    • Computer 공부 (17)
      • Backend question (10)
      • Clean architecture (2)
      • Operating system (2)
      • Network (3)
      • 항해 (0)

블로그 메뉴

  • 홈
  • EATERY's 맛집
  • CAFE 까페
  • Recipe 레시피
  • IT 공부
  • 방명록
  • 태그

공지사항

인기 글

태그

  • 용인까페
  • 영어공부
  • 흑임자 크림
  • 렌더링 수 줄이기
  • 송계옥
  • 맛집
  • memoziation
  • 인절미 티라미수
  • 삼돈식탁
  • 파스타맛집
  • key 로 접근
  • map 하는 법
  • 아메리카토노
  • 스테이크
  • have something to do with뜻
  • Array로 접근
  • 자바스크립트
  • go hand in hand
  • 현명하게 리액트
  • 묵리
  • React.memo
  • 용인맛집
  • 스쿤브레드
  • 용인추천
  • 피지오필로소피
  • 어게인마이라이프
  • have something to do with
  • 자세요정
  • 고메커피
  • 고메동 카페

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
살아가는 이유_EU

내가 살아가는 이유, 삶

이유's STUDY/알고리즘 문제풀이

[ leetcode ] dfs 문제 - number of islands

2021. 11. 2. 14:44
728x90
반응형

다시 한번 DFS 개념을 집고 넘어가자!
- 0번째 노드에서 이제 깊이 인접한 노드를 다 도는 방식으로 / stack 처럼 안에 넣었다가 지나갔으면 빼고 약간 이런식으로 동작함.


여기서 이제 궁금한 것. dfs 로 문제 풀기!
if ( grid[i][j] == '1') 로서 이제 그게 1 일 경우에만 지나갈 수 있도록 설정!!
- 이 1로서 설정하는 것은 이제 해당 내용의 값이 1 일 경우에 즉 땅일 경우에만 돌아가면 되기 때문..! 물인데 굳이 돌 필요 없자나?

1st Try -- checked 랑 언제 빠져나가야할지 고민...

class Solution {
    

    //x 좌표, y 좌표로 돌아가면서 간다고 생각해야함 
    // 섬을 찾아서 이게 연결된 곳이 없을 때까지 계속 돌아가면서 찾아간다. 
    static boolean checked[][] = new boolean[300][300];
    public boolean dfs(int x, int y) {
        if(checked[x][y]) {
            return false;
        }
        else {
            checked[x][y] = true;
            dfs(x, y-1);
            dfs(x, y+1);
            dfs(x-1, y);
            dfs(x+1, y);
            return true;    
        } 
        
        
    }
    // dfs 에서 핵심은 이제 어디 check 된 애들이지 확인 
    
    public int numIslands(char[][] grid) {
        int m = grid.length;
        int number = 0;
        
        for(int i=0; i<m; i++) {
            int n = grid[i].length;
            //여기서 dfs 함수 호출하면 될듯 싶은데 
            for(int j=0; j<n; j++) {
                //여기서 각각 도는 함수를 호출 
                if(dfs(i,j))
                    number++;
            }
        }
        
        return number;
    }
    
}




dfs 로 풀기

class Solution {
    public int numIslands(char[][] grid) { 
        if(grid == null || grid.length == 0 || grid[0].length == 0 ) 
            return 0;
        
        int m = grid.length;
        int n = grid[0].length;
        
        int count = 0;
        for(int i = 0 ; i <m ; i++ )
        {
            for(int j = 0; j < n ; j++ )
            {
                if(grid[i][j] == '1') {
                    count++;
                    merge(grid, i , j);                
                }
            
            }
        }
        
        return count;
        
    }
    
    public void merge(char[][] grid, int i, int j) {
        int m = grid.length;
        int n = grid[0].length;
        
        if(i<0 || j< 0 || i>=m || j>=n || grid[i][j] != '1' )
            return;
        
        grid[i][j] = 'X';
        
        merge(grid, i-1, j);
        merge(grid, i+1, j);
        merge(grid, i, j-1);
        merge(grid, i, j+1);
        
    }
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'이유's STUDY > 알고리즘 문제풀이' 카테고리의 다른 글

Greedy algorith - 코딩테스트 [탐욕법] : 조이스틱  (0) 2024.11.11
[Leetcode] Add two numbers  (0) 2022.11.01
[ 자료구조 ] LinkedList  (0) 2021.08.26
[ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ  (0) 2021.08.11
[ 백준 ] 1560번 - N과 m (2) --- java 이용  (0) 2021.08.06
    '이유's STUDY/알고리즘 문제풀이' 카테고리의 다른 글
    • Greedy algorith - 코딩테스트 [탐욕법] : 조이스틱
    • [Leetcode] Add two numbers
    • [ 자료구조 ] LinkedList
    • [ 백준 ] 2580 번 - 스도쿠 / java 이용 / 아직 못 푼 문제 ㅠㅠ
    살아가는 이유_EU
    살아가는 이유_EU
    안녕하세요. 초보개발자의 일상을 담은 블로그입니다.

    티스토리툴바