//알고리즘 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,..
//알고리즘 1. 완전탐색 알고리즘 2. 인접한 두칸을 고르고 바꾼다음 같은색인 부분을 먹는다. -> 행부터 두칸씩 바꿔보고 그 다음 열도 바꿔보면서 가장 긴 부분을 찾아야 함. 결국 행,열 전부 다 해봐야 알 수 있음. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class 사탕게임 { static int N, max = 1, Ans = 1; static char[][] map; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new B..
//알고리즘 1. dfs문제 2. 백트래킹으로 풀어야 함. 3. 시작위치부터 방문배열을 체크하면서 끝까지 도달하게 만들고 flag 변수를 사용하여 끝에 닿았다면 더이상 dfs를 못하게 탈출 시킴. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 빵집_3109 { static int R, C, Ans; static char[][] map; static int[] dr = { -1, 0, 1 }; static int[] dc = { 1, 1, 1 }; static boolean[][] v; static boo..
//알고리즘 1. 시뮬레이션? 완탐? 2. 내 빙고판과 사회자가 부르는 수의 배열을 만들어 저장 후 하나씩 지워가면서 빙고가 있는지 없는지 검사. 3. 3개가 빙고가 되려면 최소12개 정도부터 검사를 시작하면됨. 4. 행, 열, 대각선 각각 검사하여 빙고의 개수를 구해야 함. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class 빙고_2578 { static int[][] map = new int[5][5]; static int[][] ans = new int[5][5]; public static void ma..
//알고리즘 1. 조합문제 2. 3장의 카드를 뽑고 3장의 카드의합과 21의 차를 구한 후 가장 0보다 큰 가장큰값을 찾음. import java.util.Arrays; import java.util.Scanner; public class 블랙잭 { static int N, M; static int[] arr, numbers; static int max, ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); arr = new int[N]; for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt();..
//알고리즘 1. 동적프로그래밍(dp) 2. 1부터 주어진값까지 dp테이블을 만들어 계산함. 3. 3으로 나누어떨어질 때, 2로 나누어떨어질 때, 아니면 1을 빼는데 이 순서대로 하면 답이 안나올 수도 있음. -> 역순으로 시작해야 최소연산의 횟수를 구할 수 있음.(아이디어가 필요한 문제인듯) import java.util.Scanner; public class 백준_1로만들기_1463 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] ans = new int[N+3]; ans[1] = 0; ans[2] = 1; ans[3] = 1; for (int i = 4; ..
//알고리즘 1. 재귀로 최대가 될 수 있는 i값과 그때의 결과값을 찾음. 2. 배열을 구해서 직접 for문으로 값을 저장 시킴. import java.util.Scanner; public class 수이어가기_2635 { static int T, ans, N; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextInt(); for (int i = T; i >= 0; i--) { cal(1,T,i,i); } int[] arr = new int[ans]; cal(1,T,N,arr); System.out.println(ans); int num = T; for (int i = 0; i < arr.leng..