본문 바로가기

알고리즘/BFS & DFS

(13)
[JAVA] 백준 2250번: 트리의 높이와 너비 import java.util.Scanner; public class baekjoon2250_4 { static int order = 1; static Node[] nodeInfo; static void inorder(int node, int depth) { if (node == -1) { return; } inorder(nodeInfo[node].left, depth + 1); nodeInfo[node].depth = depth; nodeInfo[node].order = order++; inorder(nodeInfo[node].right, depth + 1); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..
[JAVA] 백준 1261번: 알고스팟 import java.util.ArrayDeque; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon1261 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int[] aryH = { 0, 0, -1, 1 }; int[] aryW = { 1, -1, 0, 0 }; int[][] info = new int[n][m]; boolean[][] visit = new b..
[JAVA] 백준 13549번: 숨바꼭질 3 import java.util.ArrayDeque; import java.util.Scanner; public class baekjoon13549 { public static void main(String[] args) { ArrayDeque dq = new ArrayDeque(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int max = 200000; boolean visit[] = new boolean[max]; int dist[] = new int[max]; dq.addFirst(n); while (!dq.isEmpty()) { int cur = dq.removeFirst(); if (cur =..
[JAVA] 백준 14226번: 이모티콘 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon14226 { public static void main(String[] args) { // 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. // 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. // 화면에 있는 이모티콘 중 하나를 삭제한다. // 이모티콘 1개에서 시작 Scanner sc = new Scanner(System.in); int s = sc.nextInt(); int max = 2000; boolean visit[][] = new boolean[max]..
[JAVA] 백준 13913: 숨바꼭질4 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class baekjoon13913 { public static void main(String[] args) { // 수빈이와 동생의 숨바꼭질 (동생을 찾아라) // 수빈이는 +1, -1, *2 로 이동을 할 수 있다. // 수빈이가 동생을 찾는데 걸리는 최소시간과, 최단경로를 나타내라 // 4, 5, 6, 7 경로로 이동하였을 때 // 최단 경로를 구하는 방법 // dist[5] = 4 // dist[6] = 5 // dist[7] = 6 // dist[4] = 0 // stack에 넣어주고 stack에서 하..
[JAVA] 백준 1697번: 숨바꼭질 import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class baekjoon1697 { public static void main(String[] args) { // 수빈이와 동생의 좌표가 주어진다. // 수빈이는 x+1, x-1, 2x로 이동할 수 있다. // 동생을 찾는 가장 빠른 시간을 구하라 Scanner sc = new Scanner(System.in); // 수빈이의 좌표 int x = sc.nextInt(); // 동생의 좌표 int y = sc.nextInt(); Queue q = new Lin..
BFS BFS 알고리즘? 모든 가중치가 1일때 최단거리를 구하는 알고리즘이다. BFS를 이용해 해결할 수 있는 문제는 아래와 같은 조건을 만족해야 한다. 1. 최소 비용 문제이어야 한다. 2. 간선의 가중치가 1이어야 한다. 3. 정점과 간선의 개수가 적어야 한다. (적다는 것은 문제의 조건에 맞춰서 해결할 수 있다는 것을 의미한다.) 간선의 가중치가 문제에서 구하라고하는 최소 비용과 의미가 일치해야 한다. 즉 거리의 최소값을 구하는 문제라면 가중치는 거리를 의미해야 하고, 시간의 최소값을 구하는 문제라면 가중치는 시간을 의미해야 한다.
[JAVA] 백준 2146번: 다리 만들기 요구 사항 두개의 섬을 이을 수 있는 가장 짧은 다리의 길이를 구하라 문제 해결 1. 섬과 바다를 구분하는 어레이를 만든다. 2. 각각의 섬을 구분할 수 있는 어레이를 만든다. 3. 각각의 섬 가장 자리로 부터 떨어지는 거리의 값을 저장한 어레이를 만든다. 3-2 각각의 섬 가장 자리로 부터 떨어진 거리의 값을 구하는 어레이에서, 새로운 좌표가 바다인데 이미 값이 들어있는 경우에는 현재 값과 해당 좌표의 값을 더한 후 어레이 리스트에 저장 3-3 가장 자리로부터 떨어진 값을 구하는 어레이에서 다음 좌표가 원 출발지와 다른 땅일 경우 현재 값을 결과 어레이 리스트에 저장 4. 어레이 리스트에서 가장 작은 값을 구한다. 1. 섬과 바다를 구분하는 어레이를 만든다. input 값을 모두 받아 어레이에 저장해보..