//알고리즘 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..
//알고리즘 1. 조합문제 2. 모든 조합의 경우를 다 구해서 결과 출력 ※조합 연습하기 좋은문제 같음. import java.util.Arrays; import java.util.Scanner; public class 일곱난쟁이 { static int[] arr = new int[9]; static int[] numbers = new int[7]; static int max = 100, sum, ans; public static void main(String[] args) { Scanner sc = new Scanner(System.in); for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); } combination(0, 0); } privat..
//알고리즘 1. 다익스트라 2. 간선과 노드가 많기 때문에 행렬보다는 리스트로 만드는게 유리할 듯. 3. 방문배열과 별개로 시야배열도 만들어서 갈 수 있는곳 체크해줘야함. -> 마지막 넥서스의 시야는 0으로 바꿔주면 다른 조건을 처리안해줘도 쉽게 풀 수 있음. 4. 거리값이 int 최대값을 넘어가기 때문에 dist 배열을 long형으로 만들어 줘야함. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.PriorityQueue; import java.util.Stri..
//알고리즘. 1. 부분집합으로 풀었던 문제를 DP테이블을 만들어 품. 2. 0/1 knapsack 처럼 정해진 칼로리에 담을 수 있는 칼로리만큼 담고 만족도를 합하여 구함. import java.util.Scanner; public class 햄버거다이어트_DP { static int T,N,L; public static void main(String[] args) { Scanner sc = new Scanner(System.in); T = sc.nextInt(); for (int tc = 1; tc
//알고리즘 1. 최대 20만까지인 배열이므로 완탐으로 풀면 시간초과 -> 아이디어를 요구하는 문제인듯. 2. 규칙대로 진행하면 버블정렬이 되는것을 알 수 있음. 3. W~B순으로 정렬하면 되니까 맨 뒤의 B부터 정렬할 횟수를 계산. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class 카드뒤집기 { static int T; static long Ans; static char[] arr; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new ..