//알고리즘 1. 그래프 탐색 -> 트리 구조이고, bfs탐색 이라고 생각 함. 2. 인접 리스트 생성 3. 최소값 갱신 -> 기본값을 -1 로 설정해두면 친척관계가 아닐 때, 계산안해도 되서 편함. 더보기 import java.util.*; import java.io.*; public class 촌수계산_2644 { static int n,x,y,ans; static boolean[] v; static ArrayList[] list; static class Point{ int p,cnt; public Point(int p, int cnt) { super(); this.p = p; this.cnt = cnt; } } public static void main(String[] args) throws Num..
//알고리즘 1. 탐색 -> 최단거리를 구해야 하기 때문에 bfs 2. 4방 탐색이기 때문에 dr, dc 배열 생성 3. 맵의 모든 'L' 에서 전부 다 탐색해봐야 함 -> 방문배열을 모든 L에 대해서 다르게 가져가야 함. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class 보물섬_2589 { static int L, W, ans; static char[][] map; static Queue q; static..
//알고리즘 1. 탐색 -> 깊이 우선 탐색 -> n 값이 100,000이므로 시간초과가 안 나도록 풀어야 함. 2. 방문배열 이외의 int 배열을 하나 더 사용하여 사이클 생성 시 cnt 값을 구함 -> 거쳐 온 노드들의 cnt값을 vNum 배열에 저장함 -> 사이클이 발생 시 해당 cnt값과 vNum에 들어있는 값으로 팀을 이룰 수 있는 사람들의 수를 구함 -> 거쳐간 노드들의 방문배열은 true로 체크해주고 vNum의 값은 재귀가 끝날 때, 0으로 다시 세팅해줌(백트래킹) 3. 결과값 = 노드수(n) - 팀을 이룰 수 있는 사람들의 수(ans) 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre..