목록깊이 우선 탐색 (14)
기록방
👉 문제링크 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 🔸 문제 분석 🔸 h x w 크기의 지도가 주어진다. 1은 땅, 0은 바다이다. 땅은 주변 8방향으로 건너다닐 수 있다. 건너다닐 수 있으면 같은 섬이다. 섬의 개수를 출력한다. BFS로 풀이할 수 있다. 지도의 모든 칸을 순회하며 확인한다. 땅을 발견하면 인접한 땅 모두를 체크한다. 체크한 땅은 다시 발견하지 않는다. 체크 횟수를 출력한다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOEx..
👉 문제링크 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 🔸 문제 분석 🔸 n X n 지도에서 붙어있는 집 (1)을 찾아 단지 별로 구분한다. 단지의 수와 각 단지별 집의 수를 오름차순으로 출력한다. BFS로 탐색해 붙어있는 집의 수와 단지 수를 구한다. 🔸 코드 🔸 import java.util.*; public class Main { public static void main(String[] args) { // 1) input Scanner sc = new Scanner(System.in); int n ..
👉 문제링크 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 🔸 문제 분석 🔸 노드 수 n, 시작 노드, 끝 노드, 간선의 수 m과 m개의 간선 정보가 입력된다. 시작 노드부터 끝 노드 까지 몇 개의 간선으로 갈 수 있는지 출력한다. 연결되어있지 않으면 -1을 출력한다. 🔸 코드 🔸 import java.util.ArrayList; import java.util.Scanner; import java.util.Stack; public class Main { public static void ..
👉 문제링크 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 🔸 문제 분석 🔸 n개의 정점 사이의 간선의 정보가 m개 입력된다. 연결된 노드의 묶음(연결 요소) 수를 출력한다. n개의 각 노드를 시작으로 BFS 혹은 DFS로 연결된 노드를 체크한다. 여기서는 BFS를 사용한다. BFS를 위해 큐와 visit 배열을 사용한다. visit 배열에 방문하지 않으면 0, 방문하면 묶음 번호를 저장한다. (0만 아니면 된다.) 묶음 수를 출력한다. 🔸 코드 ..