//알고리즘 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) ..
//알고리즘 1. bfs탐색 2. 우선순위큐를 사용하여 값이 제일 작은거부터 탐색 ※ 다익스트라로 풀 수 있음 -> 추후 업로드 예정 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenizer; public class 녹색옷입은애가젤다지_4485 { static int N, map[][], ans; static PriorityQueue q = new PriorityQueue(); static int[] dr = { -1, 1, 0, 0 }; static int[] dc = { ..
//알고리즘 1. bfs탐색문제 2. 벽을 부수고 이동할때랑 그냥 이동할때가 중복이 될 수 있기 때문에 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 벽부수고이동하기_2206_3차배열 { static int N, M, map[][], Ans = Integer.MAX_VALUE; static int[] dr = { 1, -1, 0, 0 }..
//알고리즘 1. 분할정복 2. 매번 1/4 로 줄어들기 때문에 각 구역을 분할하여 하나씩 처리해야 함. 3. boolean 으로 blue와 white를 각각 체크하여 개수를 더해줌 더보기 package baekjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 색종이만들기_2630 { static int N, map[][], AnsW, AnsB; public static void main(String[] args) throws NumberFormatException, IOException { Bu..
//알고리즘 1. dp 2. 입력값의 최대가 5000이기 때문에 5000개 이상의 배열을 만들어 계산함. 3. 3의 배수와 5의배수를 확인해야 하기 때문에 0,1,2,4는 아주 큰값으로 먼저 설정하고 6부터 계산함. 더보기 import java.util.Scanner; public class 설탕배달_2839 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] dp = new int[5003]; dp[0] = dp[1] = dp[2] = dp[4] = Integer.MAX_VALUE; dp[3] = dp[5] = 1; for (int i = 6; i < dp.len..
//알고리즘 1. 시뮬레이션, 단순 구현 2. 3차원 배열을 사용하여 상어의 움직인 후 값들을 다 저장 -> 단순 구현 했더니 통과는 했지만 시간이 생각보다 많이 소모됨. -> 시간을 단축시킬 수 있는 방법을 생각하여 추후에 업로드 예정 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.StringTokenizer; public class 낚시왕_17143 { stati..