https://leetcode.com/problems/word-search/description/
코드설명
깊이우선탐색(DFS) + 문자열(String) 을 활용합니다.
모든 n x m 을 돌면서, 첫 시작단어가 같다면 단어를 DFS로 탐색해나갑니다.
이떄, 특이사항은 word.substring(1)으로 맨 첫번쨰 단어는 하나씩 제외하면서 이후의 단어들을 맞추어나갑니다.
코드
class Solution { public boolean exist(char[][] board, String word) { boolean ret = false; for(int i=0; i<board.length; i++){ for(int j=0;j<board[i].length; j++){ if(board[i][j] == word.charAt(0)){ boolean[][] visited = new boolean[board.length][board[i].length]; visited[i][j] = true; ret |= dfs(board, word.substring(1), i, j, visited); } } } return ret; } boolean dfs(char[][] board, String word, int r, int c, boolean[][] visited){ if(word.length() == 0){ return true; } boolean ret = false; for(int[] dir : new int[][] { {-1, 0}, {1, 0}, {0, -1}, {0, 1}}){ int nr = r + dir[0]; int nc = c + dir[1]; if(nr < 0 || nr >= board.length || nc < 0 || nc >= board[0].length){ continue; } if( visited[nr][nc] == false && (board[nr][nc] == word.charAt(0))){ visited[nr][nc] = true; ret |= dfs(board, word.substring(1), nr, nc, visited); visited[nr][nc] = false; } } return ret; } }
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 57. Insert Interval - 유니온파인드(UnionFind) OR 구현(Implementation) JAVA (0) | 2024.11.24 |
---|---|
[LeetCode] 74. Search a 2D Matrix - 이분탐색(BinarySearch) JAVA (0) | 2024.11.24 |
[LeetCode] 61. Rotate List - 구현(Implementation) JAVA (0) | 2024.11.20 |
[LeetCode] 62. Unique Paths - 동적계획법(DP, Dynamic Programming) JAVA (0) | 2024.11.20 |
[LeetCode] 49. Group Anagrams - 문자열(String) + 해시맵(HashMap) JAVA (0) | 2024.11.20 |