//알고리즘 1. 시뮬레이션문제 2. 3차원 방문배열을 사용해서 질량, 속력, 개수를 저장함. 3. 개수가 1개 이상일 경우 모두다 홀수or 짝수일 경우를 구해야 하기 때문에 기존에 들어와 있는값하고 현재값의 짝,홀이 다를 경우 Max_value로 값을 초기화 하여 판단 함. import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class 마법사상어와파이어볼_20056 { static int N, M, K, map[][][], ans; static int dr[] = { -1, -1, 0, 1, 1, 1, 0, -1 }; static int dc[] = { 0, 1, 1, 1, 0, -1, -1, -1 }; ..
//알고리즘 1. dfs문제 2. 주어진 입력자료를 연결리스트로 만들기 3. 부분집합을 구함. 4. 부분집합으로 각각 선택 된 선거구가 연결되어 있는지 확인(dfs) import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class 게리맨더링_17471 { static int arr[], N, Ans = Integer.MAX_VALUE; static boolean[] v; static ArrayList[] list; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N ..
//알고리즘 1. 분할정복. 2. 재귀를 이용하여 분할정복을 구현함. import java.util.Scanner; public class z_1074 { static int N, r, c, map[][], div, Ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); r = sc.nextInt(); c = sc.nextInt(); div = (int) Math.pow(2, N); cal(1, r, c); } private static void cal(int idx, int r, int c) { if (idx == N) { int nr = Math.abs(r) % 2; int n..
//알고리즘 1. 아이디어 문제 2. 걸리는 시간이 적은 순서로 정렬한 후 더해주면 정답임. import java.util.Arrays; import java.util.Scanner; public class ATM { static int N, P[], ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); P = new int[N]; for (int i = 0; i < N; i++) { P[i] = sc.nextInt(); } Arrays.sort(P); // 배열을 작은순으로 정렬해야함. // 2중 포문으로 현재값 + 0번부터 현재의 전까지 합. for (int i = 0; i ..
//알고리즘 1. 완전탐색 문제 + 백트래킹 2. 모든 점들을 돌면서 주어진 모양을 대입해서 가격을 구해야 함. -> 'ㅜ' 생긴 모양 빼고는 주어진 좌표에서 깊이가 3인 dfs탐색을 하면 모든 모양을 만들어 낼 수 있음. 3. 'ㅜ'모양만 따로 처리해주면 쉽게 풀 수 있음. 4. dfs탐색으로 모양을 만들어낼 수 있다는 아이디어가 해결방법. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 테트로미노_14500 { static int N, M, map[][], ans; static int[] dr = { ..
//알고리즘 1. 탐색문제 2. bfs사용 거리가 가까운 물고기가 많다면, 가장 위에 있는 물고기, 그러한 물고기가 여러마리라면, 가장 왼쪽에 있는 물고기를 먹는다. -> 이 조건 때문에 0,0부터 탐색하는 방법으로 해결. 단, 시간과 메모리 많이 소모, N값이 20까지라 가능한 방법 우선순위큐를 사용하여 조건을 처리해준다면 메모리, 시간 둘다 줄일 수 있음. 추후 업로드 예정 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.ut..
//알고리즘 1. 완전탐색 문제 2. bfs 3. 3차원 방문배열을 사용 -> 말처럼 뛰어서 간 배열과 1칸씩만 뛰어서 간 배열이 달라야 함. -> 같은 배열을 사용하여 체크할경우 풀 수없음. 4. 말처럼 뛰는 배열(drr,dcc) 1칸씩만 뛰는 배열(dr,dc) 사용 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 말이되고픈원숭이_1600 { static int K, W, H, map[][],ans = Inte..
//알고리즘 1. dfs + 백트래킹 문제 2. 리스트에 내구도와 무게를 저장하고 규칙에 맞춰서 알고리즘 구현 3. 선택한 계란으로 계산을 하고 재귀 끝나고 다시 초기화 해줘야 함.(백트래킹) import java.util.*; public class 계란으로계란치기_16987 { static int N, Ans; static List list; static class Point { int s, w; public Point(int s, int w) { super(); this.s = s; this.w = w; } @Override public String toString() { return "Point [s=" + s + ", w=" + w + "]"; } } public static void main(..
//알고리즘 1. 완전탐색 2. 갈 수 있는 길과 색을 바꿔야 갈 수 있는 길 모두 순차적으로 탐색해야하므로 bfs 사용 3. 가장 적게 색을 바꾸면서 도착점에 도달해야 하기 때문에 우선순위큐를 사용하여 적게 바꾼 경우먼저 탐색해야 함. 4. 도착점에 도달한 순간이 가장 적게 바꾸고 도착한 경우이므로 탐색(bfs) 종료. -> 우선순위큐를 사용하지않고 배열을 만들어 풀 수도 있음. 차후 업로드 예정 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; public class 미로만들기_2665 { static int n, map[][],..
//알고리즘 1. 백트래킹 2. 방문배열을 1~100까지 써야함. 3. 오른쪽 대각선으로 갈 수 있는 최대한으로 전진 -> 왼쪽 대각선으로 최대한 전진 4. 갈 수있는 최대한으로 가서 실패한다면 한칸씩 빼면서 탐색. (백트래킹) * 두 달전에 못풀었던 문제인데 비슷한 유형의 문제를 풀어봐서 풀 수 있었음. 재귀에 대해 생각하게 되는 좋은 문제 더보기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 디저트카페 { static int T, N, map[][], ans; static int[] dr = { 1,..
