diff --git "a/BOJ/1000-5000353円262円210円/JY_1939.java" "b/BOJ/1000-5000353円262円210円/JY_1939.java" new file mode 100644 index 00000000..c84ac60a --- /dev/null +++ "b/BOJ/1000-5000353円262円210円/JY_1939.java" @@ -0,0 +1,84 @@ +import java.io.*; +import java.util.*; + +public class JY_1939 { + + static int N, M; + static List[] g; + static boolean[] visited; + static int ea, eb; + static boolean isOk; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + g = new ArrayList[N+1]; + for(int i=1; i(); + } + + int mc = 0; + for(int i=0; ieb로 갈 수 있는지 탐색 + canGo(ea, mid); + if(isOk) { + ans = mid; + s = mid + 1; + } else { + e = mid - 1; + } + + } + + System.out.println(ans); + } + public static void canGo(int now, int cost) { + if(now == eb) { + isOk = true; + return; + } + + visited[now] = true; + + for(int[] next : g[now]) { + if(visited[next[0]]) continue; + if(next[1] < cost) continue; + + canGo(next[0], cost); + } + + } + +} diff --git "a/BOJ/1000-5000353円262円210円/JY_2169.java" "b/BOJ/1000-5000353円262円210円/JY_2169.java" new file mode 100644 index 00000000..799d2899 --- /dev/null +++ "b/BOJ/1000-5000353円262円210円/JY_2169.java" @@ -0,0 +1,59 @@ +import java.io.*; +import java.util.*; +public class JY_2169 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + int[][] g = new int[N+1][M+1]; + int[][] dp = new int[N+1][M+1]; + for(int i=1; i오 + int[] t1 = new int[M+1]; + // t2: 오-> 왼 + int[] t2 = new int[M+1]; + + t1[1] = dp[i-1][1] + g[i][1]; + for(int j=2; j=0; j--) { + t2[j] = Math.max(dp[i-1][j], t2[j+1]) + g[i][j]; + } + + // dp에 반영 + for(int j=1; j 10) System.out.println(-1); + else System.out.println(ans); + + + } + public static void printG() { + for(int i=0; i 10) return; + // 이미 구해진 값보다 많다면 중단 + if(cnt> ans) return; + + for(int i=0; i<4; i++) { + Candy nr = move(r, i); + Candy nb = move(b, i); + + // 둘 위치가 같음 -> 위치 재조정 + if(nr.x == nb.x && nr.y == nb.y) { + // 같은 위치가 도착점이면 X + if(g[nr.x][nr.y] == 'O') continue; + // 상 + if(i == 0) { + if(r.x < b.x) { + nb.x += 1; + } else { + nr.x += 1; + } + } + // 하 + else if(i == 1) { + if(r.x> b.x) { + nb.x -= 1; + } else { + nr.x -= 1; + } + } + // 좌 + else if(i == 2) { + if(r.y < b.y) { + nb.y += 1; + } else { + nr.y += 1; + } + } + // 우 + else { + if(r.y> b.y) { + nb.y -= 1; + } else { + nr.y -= 1; + } + } + } + if(r.x == nr.x && r.y == nr.y && b.x == nb.x && b.y == nb.y) continue; + exit(nr, nb, cnt+1); + + + } + } + public static Candy move(Candy c, int dir) { + Candy nc = new Candy(c.x, c.y); + while(true) { + // 현제 위치가 도착점이면 중단 + if(g[nc.x][nc.y] == 'O') break; + int nx = nc.x + dx[dir]; + int ny = nc.y + dy[dir]; + + // 다음이 벽이면 중단 + if(g[nx][ny] == '#') break; + nc.x = nx; + nc.y = ny; + } + return nc; + } + +}

AltStyle によって変換されたページ (->オリジナル) /