알고리즘 5

백준 2667번 : 단지번호붙이기 자바

백준 2667번 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 풀이 미로 찾기와 매우 유사한 문제이다. 다른점은 단지라는 그래프의 개수와 각 단지의 집들 즉, 각 그래프의 노드들의 개수를 오름차순으로 출력하는 문제이다. 그저 그래프를 찾아내서 얼마만큼의 노드들이 연결되어 있는지만 확인하기에 BFS, DFS 둘다 사용이 가능하다. 여기서는 BFS를 사용하였다. import java.io.*; import java.util.*; public class Main { static int[][] graph; st..

백준 2606번 : 바이러스 자바

백준 2606번 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net 문제 풀이 그래프에서 1번 컴퓨터(노드)를 시작점으로 연결되어있는 컴퓨터들은 모두 바이러스에 감염된 것이기에 BFS , DFS 둘다 사용하여 풀 수 있다. 이번에는 DFS를 사용하여 풀었다. 재귀호출 , Stack 두 가지 경우를 둘다 사용해보았다. import java.io.*; import java.util.*; public class Main { static int[][] graph; static boolean[] visited; static i..

백준 2178번 : 미로탐색 자바

백준 2178번 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 풀이 BFS를 사용하여 풀었다. 시작점이 (0,0)으로 고정되어있고 각 칸과 칸 사이의 거리는 동일하고 이동할 수 있는 칸들은 서로 연결되어 있기 때문에 결국에는 미로를 그래프로써 본다면 (N,M)까지 가는 거리는 그 높이만큼이 거리라고 볼 수 있다. import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.StringToken..

백준 1260번 : DFS와 BFS 자바

백준 1260번 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 풀이 DFS와 BFS의 기본적인 문제 보통 DFS는 스택이나 재귀호출 BFS는 큐를 사용한다. import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { public static Queue card; public static void main..

백준 4673 자바

백준 4673번 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 문제 풀이 import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int N = 10000; boolean[..

baekjoon 2023.11.03