//알고리즘 1. 다익스트라. ※ 이전에 우선순위큐와 bfs, 백트레킹을 사용하여 해결한 문제. 2. 도착지점까지의 최소값을 갱신(dist 배열)하면서 찾아감. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; public class 보급로_다익스트라 { static int T, N, map[][], Ans; static boolean[][] v; static int[] dr = { -1, 1, 0, 0 }; static int[] dc ..
//알고리즘 1. 재귀, 시뮬레이션 -> 중복순열로 해결가능 2. 시뮬레이션 문제이기 때문에 주어진 조건에 맞춰 해결. 3. 모든 경우를 다 해봐야 하기 때문에 재귀로 해결 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 벽돌깨기재귀 { static int T, N, W, H, ans, point, map[][]; // H x W 배열 static int[] dr = { 1, -1, 0, 0 }; static int[] dc = { 0, 0, 1, -1 }; public static void mai..
//알고리즘 1. 시뮬레이션 2. 한번에 모든 원소를 다 움직여야 하기 때문에 Queue를 사용 3. 3차원 배열로 값을 저장하여 해결 ※ 공간복잡도를 계산해보고 사용하는걸 추천. 더보기 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 미생물격리 { static int T, N, M, K, map[][][], Ans; static int[] dr = { 0, -1, 1, 0, 0 }; // 1~4 상하좌우 sta..
//알고리즘 1. dfs , 백트레킹 2. 가장 높은곳에서 부터 시작하므로 max값 저장 3. max값 에서 dfs탐색 -> 다음 탐색지점의 값이 현재값보다 작을 때 그냥 탐색 -> 다음 탐색지점의 값이 현재값보다 크거나 같을 때, cost(딱 1곳만 깎을 수 있음)가 1일경우 && 최대공사가능깊이를 비교하여 탐색 4. 백트레킹으로 모든 경우를 다 시도 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 등산로조성 { static int T, N, K, map[][], ans; static int[] ..
//알고리즘 1. 구현 + 아이디어 2. 알파벳 구멍이 개수를 미리 배열로 만들어서 비교 더보기 import java.util.Scanner; public class Noglass { static int T, N; static String str_1, str_2; static int[] array = { 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; // A~Z까지 원 개수 static char[] arr_1; static char[] arr_2; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextIn..
//알고리즘 1. DP 2. 규칙을 찾아내고 DP 테이블을 만들어 계산 풀이 1. 더보기 import java.util.Scanner; public class GCD2 { static int T, K, cnt, A, B; static long[] v; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextInt(); v = new long[93]; for (int tc = 1; tc
//알고리즘 1. 부분집합 - 부분집합(사람)을 이용하여 계단을(A,B)를 선택 2. 계단은 3명씩 이용가능하기 때문에 Queue를 사용 - 큐의 크기(3 : 3명씩 가능하기 때문)와 시간을 이용하여 offer 와 poll 3. A계단과 B계단을 각각 계산하여 모든 부분집합에 대한 최소값을 구함. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Queue; impor..
//알고리즘 1. bfs탐색 2. 매 초마다 번호가 낮은 종류의 바이러스부터 먼저 증식한다는 조건이 있기 때문에 우선순위 큐 사용. 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.StringTokenizer; public class 경쟁적전염_18405 { static int n, k, map[][]; static int[] dr = { -1, 1, 0, 0 }; static int[] dc = { 0, 0, -1, 1, }; static L..
//알고리즘 1. dfs탐색 문제 2. 시작점에서 dfs탐색을 시작하여 도달할 수 있는 최대 개수를 구하면됨. 더보기 import java.util.ArrayList; import java.util.Scanner; public class 바이러스 { static int N, M, count; static boolean[] v; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); v = new boolean[N + 1]; ArrayList[] adjList = new ArrayList[N + 1]; for (int i = 0; i < adjList.leng..
//알고리즘 1. dfs문제 2. 2가지 방법으로 나눠서 각각 계산 -> 1. 적록색약인 사람. -> 2. 적록색약이 아닌 사람 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class 적록색약 { static int N; static char[][] map; static boolean v[][]; static int[] dr = { -1, 1, 0, 0 }; static int[] dc = { 0, 0, -1, 1 }; static class Point { int x; int y; char col; public Point(int x, int y, char col) ..