// 알고리즘 1. 시뮬? + 완탐 2. 최대 5번 이동이 가능하기 때문에 0~4까지 갈 수 있는 모든 이동방향을 구함 -> 재귀로 해결 3. 각 이동방향마다 시뮬레이션 -> 위 방향일 때 하나만 구현하면 아래 왼쪽 오른쪽은 비슷한 코드가 됨. -> 계산된 값은 또 더해지면 안됨 ex) 2 2 2 2 -> 4 4 0 0 (왼쪽) -> 위 경우를 해결하기 위해 방문배열 사용(v[N][N]) 더보기 import java.io.*; import java.util.*; public class Easy2048_12100 { static int N, map[][], dir[], ans; static int[] dr = { 1, -1, 0, 0 }; // 하 상 우 좌 static int[] dc = { 0, 0, ..
* 데이터베이스에 datetime이 yyyy-MM-dd HH:mm:ss 형식으로 저장 될 경우 yyyy-mm-dd hh:mm:ss형식의 String을 LocalDateTime으로 바꾸기 LocalDateTime d = LocalDateTime.parse("2021-01-31 12:52:32", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); * java8에서 시간 / 날짜 비교 isBefore() : 인자보다 과거일 때 true가 리턴 isAfter() : 인자보다 미래일 때 true가 리턴 isEqual() : 인자와 같은 시간일 때 true가 리턴 public void compareDate1() throws ParseException { LocalDate..
// 알고리즘 1. 부분집합 2. check배열을 나올 수 있는 최대 수인 2000000 생성 3. 주어진 수의 부분집합을 구해 모두 더해서 check 배열에 표시 4. check배열을 1부터 시작하여 false인 값이 정답 더보기 import java.io.*; import java.util.*; public class 부분수열의합_14225 { static int N, arr[], ans; static boolean[] v; static boolean[] check; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); v = new boolean[N]; check = new bool..
// 알고리즘 1. 시뮬레이션 2. 큐를 이용한 문제 -> 인덱스와 중요도를 하나의 클래스로 정의하여 큐에 집어넣음 -> 하나씩 poll 하고 남아있는 문서의 중요도를 확인 후 처리 -> 중요도를 담는배열 arr와 해당 문서를 처리하면 -1로 설정 더보기 import java.util.*; import java.io.*; public class 프린터큐_1966 { static int T, N, M, arr[], ans; static class Point { int idx, pr; public Point(int idx, int pr) { this.idx = idx; this.pr = pr; } } public static void main(String[] args) throws Exception { Bu..
// 알고리즘 1. bfs 2. 3개의 벽을 세움 -> v[N][M][N][M][N][M] 방문배열을 사용하여 중복계산제거 3. 벽을 세운 후 바이러스 퍼뜨리기 -> 기존의 map을 입력할 때 바이러스 위치를 dq에 저장해놓고 bfs 시작 시 dq에 있는 모든값을 q에 집어넣고 시작 -> 4방 탐색 -> 바이러스가 증식한 개수를 카운팅 4. 결과 -> 기존의 맵을 입력받을 때 0의 개수 카운팅 -> 0의 개수 - 증식한 개수 - 3(벽) -> 최대값 더보기 import java.util.*; import java.io.*; public class 연구소_14502 { static int N, M, ans,cnt_zero; static boolean v[][][][][][]; static Queue dq;..
// 알고리즘 1. 백트래킹 2. 2차원 방문배열 사용 -> (1+2, 1+3, 1+4, 1+5, 1+6, 1+7, 1+8, 1+9, 2+3, 2+4, 2+5, ...) 과 같이 사용할 수 있는 블록이 (x,y)형태로 주어지기 때문에 2차원 배열 사용 -> 기존 스도쿠처럼 하나씩 값을 변경하는 문제가 아닌 2칸의 블록 형태로 집어 넣는 문제 임. 3. 오른쪽 / 아래를 탐색하는 배열 -> 왼쪽 위부터 하나 씩 채워지기 때문에 오른쪽과 아래만 탐색하면 됨. 더보기 import java.util.*; import java.io.*; public class 스도미노쿠_4574 { static int N; static boolean flag; static boolean[][] v; static int[] dr ..
//알고리즘 1. bfs 2. 3차원 방문배열 사용 -> 벽을 부시고 갈 때, 안 부시고 갈때 방문배열을 가지고 가야 함 더보기 import java.util.*; import java.io.*; public class 벽부수고이동하기2_14442 { static int N, M, K, map[][]; static boolean v[][][]; static int[] dr = { -1, 0, 1, 0 }; static int[] dc = { 0, 1, 0, -1 }; static class Point { int r, c, k, cnt; public Point(int r, int c, int k, int cnt) { super(); this.r = r; this.c = c; this.k = k; this...
//알고리즘 1. bfs 2. 방문배열을 4차원 배열로 가져가야하는 문제 -> 빨간공과 파란공이 같이 움직이므로 각각의 좌표에 해당하는 방문배열을 만들어야 함. 3. 이동 -> 보통 빨간색을 먼저 이동시킴 -> 빨간색의 1칸 이동범위에 파란색이 있을 경우 파란색부터 움직여야 함. (엣지 케이스일듯?) 4. 결과 -> 공이 들어갔을 경우를 확인하기위해 boolean R, B 사용 -> boolean b,r 은 벽면에 닿았을 때를 의미함. (더이상 갈 수 없을 경우) 더보기 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.ut..
