Skip to content

Commit 206105d

Browse files
committed
solve: 코딩테스트 문제 풀이 - 20일차
1 parent b666731 commit 206105d

File tree

3 files changed

+187
-0
lines changed

3 files changed

+187
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Set;
8+
9+
public class Main {
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
int n = Integer.parseInt(br.readLine());
13+
14+
int[][] costs = new int[n][3];
15+
for (int i=0; i<n; i++) {
16+
String[] parts = br.readLine().split(" ");
17+
int rCost = Integer.parseInt(parts[0]);
18+
int gCost = Integer.parseInt(parts[1]);
19+
int bCost = Integer.parseInt(parts[2]);
20+
21+
costs[i][0] = rCost;
22+
costs[i][1] = gCost;
23+
costs[i][2] = bCost;
24+
}
25+
26+
int[][] dp = new int[n][3];
27+
dp[0][0] = costs[0][0];
28+
dp[0][1] = costs[0][1];
29+
dp[0][2] = costs[0][2];
30+
31+
for (int i=1; i<n; i++) {
32+
dp[i][0] = costs[i][0] + Math.min(dp[i-1][1], dp[i-1][2]);
33+
dp[i][1] = costs[i][1] + Math.min(dp[i-1][0], dp[i-1][2]);
34+
dp[i][2] = costs[i][2] + Math.min(dp[i-1][0], dp[i-1][1]);
35+
}
36+
37+
int minCost = Math.min(dp[n-1][0], Math.min(dp[n-1][1], dp[n-1][2]));
38+
System.out.println(minCost);
39+
}
40+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
6+
public class Main {
7+
static int N;
8+
9+
static class Node {
10+
int to, weight;
11+
public Node (int to, int weight) {
12+
this.to = to;
13+
this.weight = weight;
14+
}
15+
}
16+
17+
static List<Node>[] tree;
18+
public static void main(String[] args) throws IOException {
19+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
20+
N = Integer.parseInt(br.readLine());
21+
22+
tree = new ArrayList[N+1]; // 1~N
23+
for (int i=1; i<=N; i++) {
24+
tree[i] = new ArrayList<>();
25+
}
26+
27+
for (int i=0; i<N; i++) {
28+
String[] parts = br.readLine().split(" ");
29+
int from = Integer.parseInt(parts[0]);
30+
for (int j=1; j<parts.length; j+=2) {
31+
int num = Integer.parseInt(parts[j]);
32+
if (num == -1) break;
33+
int weight = Integer.parseInt(parts[j+1]);
34+
35+
tree[from].add(new Node(num, weight));
36+
}
37+
}
38+
39+
// System.out.print(tree[4].get(2).weight + " ");
40+
int[] result1 = bfs(1);
41+
int farNode = result1[0];
42+
43+
int[] result2 = bfs(farNode);
44+
int maxDistance = result2[1];
45+
System.out.println(maxDistance);
46+
}
47+
48+
public static int[] bfs(int start) {
49+
boolean[] visited = new boolean[N+1];
50+
int[] distance = new int[N+1];
51+
Queue<Integer> queue = new LinkedList<>();
52+
queue.offer(start);
53+
visited[start] = true;
54+
55+
int target = start;
56+
int maxDistance = 0;
57+
while (!queue.isEmpty()) {
58+
int curr = queue.poll();
59+
60+
for (Node next: tree[curr]) {
61+
if (!visited[next.to]) {
62+
visited[next.to] = true;
63+
queue.offer(next.to);
64+
distance[next.to] = distance[curr] + next.weight;
65+
}
66+
67+
if (distance[next.to] > maxDistance) {
68+
maxDistance = distance[next.to];
69+
target = next.to;
70+
}
71+
}
72+
}
73+
return new int[] {target, maxDistance};
74+
}
75+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import java.util.;
2+
3+
class Solution {
4+
int[][] map = new int[102][102];
5+
boolean[][] visited = new boolean[102][102];
6+
int[] dx = {0, 0, -1, 1};
7+
int[] dy = {1, -1, 0, 0};
8+
9+
public int solution(int[][] rectangle, int characterX, int characterY, int itemX, int itemY) {
10+
for (int[] r rectangle) {
11+
int x1 = r[0] 2;
12+
int y1 = r[1] 2;
13+
int x2 = r[2] 2;
14+
int y2 = r[3] 2;
15+
16+
for (int x=x1; x=x2; x++) {
17+
map[y1][x] = 1;
18+
map[y2][x] = 1;
19+
}
20+
21+
for (int y=y1; y=y2; y++) {
22+
map[y][x1] = 1;
23+
map[y][x2] = 1;
24+
}
25+
}
26+
27+
for (int[] r rectangle) {
28+
int x1 = r[0] 2;
29+
int y1 = r[1] 2;
30+
int x2 = r[2] 2;
31+
int y2 = r[3] 2;
32+
33+
for (int x = x1+1; x x2; x++) {
34+
for (int y = y1+1; y y2; y++) {
35+
map[y][x] = 0;
36+
}
37+
}
38+
}
39+
40+
int result = bfs(characterX 2, characterY 2, itemX 2, itemY 2);
41+
result = 2;
42+
43+
return result;
44+
}
45+
46+
public int bfs(int startX, int startY, int targetX, int targetY) {
47+
Queueint[] queue = new LinkedList();
48+
queue.offer(new int[] {startX, startY, 0});
49+
visited[startY][startX] = true;
50+
51+
while (!queue.isEmpty()) {
52+
int[] curr = queue.poll();
53+
int cx = curr[0], cy = curr[1], distance = curr[2];
54+
55+
if (cx == targetX && cy == targetY) {
56+
return distance;
57+
}
58+
for (int i=0; i4; i++) {
59+
int nx = cx + dx[i];
60+
int ny = cy + dy[i];
61+
62+
if (nx = 0 && nx 102 && ny = 0 && ny 102) {
63+
if (!visited[ny][nx] && map[ny][nx] == 1) {
64+
visited[ny][nx] = true;
65+
queue.offer(new int[] {nx, ny, distance + 1});
66+
}
67+
}
68+
}
69+
}
70+
return -1;
71+
}
72+
}

0 commit comments

Comments
 (0)