Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0d0c36f

Browse files
authored
Merge pull request #338 from GreatAlgorithm-Study/xubin
[25주차] 배수빈
2 parents 27d707e + bfbcff5 commit 0d0c36f

File tree

4 files changed

+213
-0
lines changed

4 files changed

+213
-0
lines changed

‎BOJ/10001-15000번/SB_12784.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
import java.util.StringTokenizer;
7+
8+
public class SB_12784 {
9+
static List<List<Node>> adj;
10+
static boolean[] parents;
11+
12+
private static int dfs(int node) {
13+
int cnt = 0;
14+
parents[node] = true;
15+
16+
for (Node nxt : adj.get(node)) {
17+
if (parents[nxt.idx]) continue; // 부모는 패쓰
18+
cnt += Math.min(nxt.val, dfs(nxt.idx));
19+
}
20+
21+
if (cnt==0 && adj.get(node).size()==1) return adj.get(node).get(0).val; // 리프노드면 부모와 이어진 값 반환
22+
return cnt;
23+
}
24+
public static void main(String[] args) throws IOException {
25+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
26+
StringTokenizer st;
27+
StringBuilder sb = new StringBuilder();
28+
29+
int T = Integer.parseInt(br.readLine());
30+
while (T-- > 0) {
31+
st = new StringTokenizer(br.readLine());
32+
int N = Integer.parseInt(st.nextToken());
33+
int M = Integer.parseInt(st.nextToken());
34+
if (N==1) {
35+
sb.append(0).append("\n");
36+
continue;
37+
}
38+
adj = new ArrayList<>();
39+
for (int i = 0; i <= N; i++) {
40+
adj.add(new ArrayList<>());
41+
}
42+
parents = new boolean[N + 1];
43+
for (int i = 0; i < M; i++) {
44+
st = new StringTokenizer(br.readLine());
45+
int u = Integer.parseInt(st.nextToken());
46+
int v = Integer.parseInt(st.nextToken());
47+
int c = Integer.parseInt(st.nextToken());
48+
adj.get(u).add(new Node(v, c));
49+
adj.get(v).add(new Node(u, c));
50+
}
51+
sb.append(dfs(1)).append("\n");
52+
}
53+
54+
// 1과 연결된 부모 노드 구하기 (재귀)
55+
// 해당 노드와 연결된 리프노드들에서 해당 노드로 오는 값의 합, 해당 노드에서 부모노드까지 합 중 최소값 선택
56+
System.out.println(sb);
57+
}
58+
59+
private static class Node{
60+
int idx, val;
61+
62+
public Node(int idx, int val) {
63+
this.idx = idx;
64+
this.val = val;
65+
}
66+
}
67+
}

‎BOJ/5001-10000번/SB_9944.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.StringTokenizer;
5+
6+
public class SB_9944 {
7+
static int N, M;
8+
static char[][] board;
9+
static int mn;
10+
static final int INF = Integer.MAX_VALUE;
11+
static int[] dx = {-1, 1, 0, 0};
12+
static int[] dy = {0, 0, -1, 1};
13+
14+
private static boolean isAllVisited(boolean[][] visited) {
15+
for (int i = 0; i < N; i++) {
16+
for (int j = 0; j < M; j++) {
17+
if (!visited[i][j]) return false;
18+
}
19+
}
20+
return true;
21+
}
22+
23+
private static void dfs(int x, int y, int cnt, boolean[][] visited) {
24+
if (cnt >= mn) return; // 가지 치기
25+
26+
boolean canMove = false;
27+
for (int i = 0; i < 4; i++) {
28+
int nx = x + dx[i];
29+
int ny = y + dy[i];
30+
if (!isValid(nx, ny) || visited[nx][ny]) continue;
31+
canMove = true;
32+
33+
while (isValid(nx, ny) && !visited[nx][ny]) {
34+
visited[nx][ny] = true;
35+
nx += dx[i];
36+
ny += dy[i];
37+
}
38+
39+
nx -= dx[i]; // 위에서 한 칸 삐져나오니까 한칸 뒤로가기
40+
ny -= dy[i];
41+
42+
dfs(nx, ny, cnt + 1, visited); // 한 방향 당 cnt++
43+
44+
while (nx != x || ny != y) { // 처음위치까지 이동
45+
visited[nx][ny] = false;
46+
nx -= dx[i];
47+
ny -= dy[i];
48+
}
49+
}
50+
51+
if (!canMove && isAllVisited(visited)) { // 더이상 움직일 수 없고 모든 칸 방문 시 mn 업데이트
52+
mn = Math.min(mn, cnt);
53+
}
54+
}
55+
56+
private static boolean isValid(int x, int y) {
57+
return 0 <= x && x < N && 0 <= y && y < M;
58+
}
59+
60+
public static void main(String[] args) throws IOException {
61+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
62+
StringTokenizer st;
63+
StringBuilder sb = new StringBuilder();
64+
65+
String line;
66+
int turn = 1;
67+
while ((line = br.readLine()) != null && !line.isEmpty()) {
68+
st = new StringTokenizer(line);
69+
N = Integer.parseInt(st.nextToken());
70+
M = Integer.parseInt(st.nextToken());
71+
72+
board = new char[N][M];
73+
boolean[][] visited = new boolean[N][M];
74+
mn = INF;
75+
76+
for (int i = 0; i < N; i++) {
77+
line = br.readLine();
78+
for (int j = 0; j < M; j++) {
79+
board[i][j] = line.charAt(j);
80+
if (board[i][j] == '*') visited[i][j] = true;
81+
}
82+
}
83+
84+
for (int i = 0; i < N; i++) {
85+
for (int j = 0; j < M; j++) {
86+
if (board[i][j] == '*' || visited[i][j]) continue;
87+
visited[i][j] = true;
88+
dfs(i, j, 0, visited);
89+
visited[i][j] = false;
90+
}
91+
}
92+
sb.append("Case ").append(turn++).append(": ").append(mn == INF ? -1 : mn).append("\n");
93+
}
94+
95+
System.out.println(sb);
96+
}
97+
}

‎Programmers/Level2/SB_389480.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.util.*;
2+
3+
class SB_389480 {
4+
public int solution(int[][] info, int n, int m) {
5+
int INF = 1000;
6+
int idx = info.length;
7+
8+
int[][] dp = new int[idx+1][m]; // dp[i][j]=k, i만큼 물건을 훔칠때 B의 흔적개수가 j, 이때 A의 최소 흔적 개수
9+
for(int i=0; i<=idx; i++) {
10+
Arrays.fill(dp[i], INF);
11+
}
12+
13+
dp[0][0] = 0;
14+
15+
for(int i=1; i<=idx; i++){
16+
int a = info[i-1][0]; // 현재 물건을 훔칠때 a,b의 각 흔적
17+
int b = info[i-1][1];
18+
for(int j=0; j<m; j++){
19+
dp[i][j] = Math.min(dp[i][j], dp[i-1][j]+a);
20+
if(j+b < m){
21+
dp[i][j+b] = Math.min(dp[i][j+b], dp[i-1][j]);
22+
}
23+
}
24+
}
25+
26+
int mn = INF;
27+
for(int j=0; j<m; j++){
28+
mn = Math.min(mn, dp[idx][j]);
29+
}
30+
return mn >= n ? -1 : mn;
31+
32+
}
33+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
WITH RECURSIVE TM AS (
2+
SELECT 0 AS HOUR
3+
UNION ALL
4+
SELECT HOUR+1
5+
FROM TM
6+
WHERE HOUR < 23
7+
)
8+
9+
SELECT A.HOUR, IFNULL(B.COUNT, 0) AS COUNT
10+
FROM TM A
11+
LEFT JOIN (
12+
SELECT HOUR(DATETIME) AS HOUR,
13+
COUNT(HOUR(DATETIME)) AS COUNT
14+
FROM ANIMAL_OUTS
15+
GROUP BY HOUR(DATETIME)
16+
) B ON A.HOUR = B.HOUR

0 commit comments

Comments
(0)

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