문제 https://www.acmicpc.net/problem/1743 알고리즘 : DFS 난이도 : 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int n; static int m; static int garbage; static int count; static boolean[][] visit; static int[][] map; static int max = 0; static int dx[] = {-1, 1, 0, 0}; static int dy[] = {0, 0, 1, -1}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); StringTokenizer st = new StringTokenizer(str); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); garbage = Integer.parseInt(st.nextToken()); visit = new boolean[n][m]; map = new int[n][m]; for (int i = 0; i < garbage; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()) - 1; int b = Integer.parseInt(st.nextToken()) - 1; map[a][b] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (!visit[i][j] && map[i][j] == 1) { DFS(i, j); max = Integer.max(max, count); count = 0; } } } System.out.println(max); } public static void DFS(int x, int y) { visit[x][y] = true; count++; for (int i = 0; i < 4; i++) { int nextX = x + dx[i]; int nextY = y + dy[i]; if (nextX >= 0 && nextY >= 0 && nextX < n && nextY < m) { if (!visit[nextX][nextY] && map[nextX][nextY] == 1) { DFS(nextX, nextY); } } } } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등. 문제 https://www.acmicpc.net/problem/2178 알고리즘 : BFS 난이도 : 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int n; static int m; static int[][] board; static boolean[][] visit; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static Queue<int[]> queue; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); n=Integer.parseInt(st.nextToken()); m=Integer.parseInt(st.nextToken()); board=new int[n][m]; visit=new boolean[n][m]; for(int i=0;i<n;i++){ String str= br.readLine(); String[] strArr = str.split(""); for(int j=0;j<m;j++){ board[i][j]=Integer.parseInt(strArr[j]); } } BFS(0,0); System.out.println(board[n-1][m-1]); } public static void BFS(int x,int y) { queue = new LinkedList<>(); queue.add(new int[]{x,y}); while(!queue.isEmpty()){ int[] now = queue.poll(); int nowX = now[0]; int nowY = now[1]; for(int i=0;i<4;i++){ int nextX=nowX+dx[i]; int nextY=nowY+dy[i]; if (nextX < 0 || nextY < 0 || nextX >= n || nextY >= m) continue; if (visit[nextX][nextY] || board[nextX][nextY] == 0) continue; queue.add(new int[] {nextX, nextY}); board[nextX][nextY] = board[nowX][nowY] + 1; visit[nextX][nextY] = true; } } } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등. 문제 https://www.acmicpc.net/problem/13023 알고리즘 : ? 난이도 : 접근 내가 풀기 위해 접근했던 순서 가정 풀기 전에 ~ 식으로 풀면 되겠다. 등. 풀어보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int n; static int m; static int garbage; static int count; static boolean[][] visit; static int[][] map; static int max = 0; static int dx[] = {-1, 1, 0, 0}; static int dy[] = {0, 0, 1, -1}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); StringTokenizer st = new StringTokenizer(str); n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); garbage = Integer.parseInt(st.nextToken()); visit = new boolean[n][m]; map = new int[n][m]; for (int i = 0; i < garbage; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()) - 1; int b = Integer.parseInt(st.nextToken()) - 1; map[a][b] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (!visit[i][j] && map[i][j] == 1) { DFS(i, j); max = Integer.max(max, count); count = 0; } } } System.out.println(max); } public static void DFS(int x, int y) { visit[x][y] = true; count++; for (int i = 0; i < 4; i++) { int nextX = x + dx[i]; int nextY = y + dy[i]; if (nextX >= 0 && nextY >= 0 && nextX < n && nextY < m) { if (!visit[nextX][nextY] && map[nextX][nextY] == 1) { DFS(nextX, nextY); } } } } } 시행착오 풀 면서 자신이 했던 시행착오들 참고자료 함께 보면 좋은 글, 링크 등.