Tags
- BOJ
- ๊ทธ๋ํ ํ์
- ์๋ฃ๊ตฌ์กฐ
- ์ํ
- ์ ๋ ฌ
- Dynamic Programming
- ๊ทธ๋ํ ์ด๋ก
- PGM
- ๋ฌธ์์ด
- queue
- BFS
- dfs
- ์๋ฎฌ๋ ์ด์
- DP
- ๋๋น ์ฐ์ ํ์
- stack
- sort
- Study
- Java
- SpringBoot
- ๊ต์ฌ
- ๋ฐฑํธ๋ํน
- greedy
- ๊ตฌํ
- ์ ์๋ก
- Brute Force Algorithm
- Python
- LV2
- CodingTest
- ๊น์ด ์ฐ์ ํ์
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1167 : ํธ๋ฆฌ์ ์ง๋ฆ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ๋
ธ๋ ์ฌ์ด ๊ฑฐ๋ฆฌ(๊ฐ์ค์น)๊ฐ ์๋ ํธ๋ฆฌ์์ ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
- ์ด๋ ๋ถ๋ถ ๊ฐ์ค์น๊ฐ ํฐ ๊ฐ์ด๋ ํธ๋ฆฌ์ ์ง๋ฆ ์ ๋์ ๋ฆฌํ ๋ ธ๋์ผ ๊ฒ์ด๋ค. (ํฐ ๊ฐ์ค์น ๋ถ๋ถ์ ๋ฐ๋์ ์ง๋จ)
- ํธ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ ธ๋ ์ฌ์ด์ ๊ฒฝ๋ก๋ ํ๋๋ก ์ ์ผํ๋ค.
- ํ ๋ ธ๋์์ ๊ฐ์ฅ ๋จผ ๋ ธ๋๋ฅผ ๊ตฌํ๋ฉด, ๊ทธ ๋ ธ๋๊ฐ ํธ๋ฆฌ์ ์ง๋ฆ ์ ๋ ๋ฆฌํ ๋ ธ๋ ์ค ํ๋์ด๋ค.
- DFS ๋ ๋ฒ์ผ๋ก ํ์ดํ ์ ์๋ค.
- DFS 1 : ์๋ฌด ๋ ธ๋์์ ๊ฐ์ฅ ๋จผ ๋ ธ๋๋ฅผ ๊ตฌํ๋ค.
- DFS 2 : ๊ตฌํ ๋ ธ๋์์ ๋ค์ ๊ฐ์ฅ ๋จผ ๋ ธ๋๋ฅผ ๊ตฌํ๋ฉด, ๊ทธ ๊ฑฐ๋ฆฌ๊ฐ ํธ๋ฆฌ์ ์ง๋ฆ์ด๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
private static class Edge {
int node, weight;
public Edge(int node, int weight) {
this.node = node;
this.weight = weight;
}
}
private static ArrayList<Edge>[] nodeList;
private static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
int V = Integer.parseInt(br.readLine());
nodeList = new ArrayList[V + 1];
for (int i = 1; i <= V; i++) {
nodeList[i] = new ArrayList<>();
}
for (int i = 0; i < V; i++) {
st = new StringTokenizer(br.readLine());
int node_number = Integer.parseInt(st.nextToken());
while (true) {
int node = Integer.parseInt(st.nextToken());
if (node == -1) break;
int weight = Integer.parseInt(st.nextToken());
nodeList[node_number].add(new Edge(node, weight));
}
}
visited = new boolean[V + 1];
Edge start_point = dfs(1, 0);
visited = new boolean[V + 1];
Edge end_point = dfs(start_point.node, 0);
bw.write(Integer.toString(end_point.weight));
bw.flush();
}
private static Edge dfs(int now, int weight) {
visited[now] = true;
int max = 0;
Edge temp = null;
Edge result = new Edge(now, weight);
for (Edge next : nodeList[now]) {
if (!visited[next.node]) {
temp = dfs(next.node, next.weight + weight);
if (temp.weight > max) {
max = temp.weight;
result = temp;
}
}
}
return result;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ฉค๋ฒ ํด๋์ค/๋ณ์ ์ ์ธ
- ๋ ธ๋ ๋ฒํธ์ ๊ฐ์ค์น๋ฅผ ์ ์ฅํ ๊ฐ์ ํด๋์ค Edge๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- ๋ ธ๋๋ณ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ArrayList ๋ฐฐ์ด nodeList๋ฅผ ์ฌ์ฉํ๋ค.
- DFS์์ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ์ํ boolean ๋ฐฐ์ด visited๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ ธ๋ ๊ฐ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ nodeList์ ์ ๋ ฅ๋ฐ์๋ค.
- dfs ๋ฉ์๋๋ฅผ ํตํด DFS๋ฅผ ๊ตฌํํ๊ณ , ๊ฐ์ฅ ๋จผ ๋
ธ๋์ ๊ทธ ๊ฐ์ค์น๋ฅผ Edge ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
- ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ฒดํฌํ๋ค.
- ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ DFS๋ก ํ์ ํ ๊ฐ์ฅ ๋จผ ๋ ธ๋์ ๋ฒํธ์ ๊ทธ ๊ฐ์ค์น๋ฅผ result์ ๋ด๋๋ค.
- ๋ง์ฝ ๋ฆฌํ๋ ธ๋๋ผ๋ฉด(๋ฐฉ๋ฌธํ ์ธ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด), ํ์ฌ ๋ ธ๋์ ๊ฐ์ค์น๋ฅผ ๋ฐํํ๋ค.
๐ธ end ๐ธ
๋ฌธ์ ์ ๋ถ์๊ณผ ํ์ด๋ฅผ ์ ์ด๊ฐ๋ฉฐ ์งํํ๋ค.
- ์ฒ์์ ํ ๋ ธ๋์์ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ๋๋ ์ถ์ด์ ๋ค์ต์คํธ๋ผ, ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ค. ํ์ง๋ง, ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๊ฐ ์๋๊ณ ๊ฒฝ๋ก๊ฐ ์ ์ผํด์ ๊ฐฑ์ ์ด ์ผ์ด๋์ง ์์ ๋ณํํด์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ฐ๋ฅด์ง ์๋ค๊ณ ์๊ฐํ๋ค. (์ง๋ฌธ ์ค์ ๋ค์ต์คํธ๋ผ ์ฌ์ฉ์ผ๋ก ํต๊ณผ๋์๋ค๋ ๋ง์ ๋ณด์๋ค)
- ๋ค์ ์๊ฐํ ๋ฐฉ๋ฒ์ ์์ ๊ฐ์ด ๋ชจ๋ ๋ ธ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํ๋ ๊ฒ์ธ๋ฐ, ๋ ธ๋ ์๊ฐ 10๋ง๊ฐ๋ค๋ณด๋ ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผํ ๊ฒ ๊ฐ์๋ค. (์ค์ ๋ ธ๋ ํ๋๊ณ , ๊ทธ ์ธ์ ๋ณ๋ชจ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๋ฐฉ์์ ๊ทน๋ค์ ์ธ ๋ชจ์์ด ์๋ค๋ฉด..)
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ํ์ด๋ ํฌ๊ธฐํ๋ค.
- ์ง๋ฌธ๊ณผ ํฌ์คํ ์ ํ์ธํด ํ์ด ๋ฐฉ๋ฒ์ ํ์ธํด๋ณด๋ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ DFS 2๋ฒ์ผ๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ด๋ฐ ํ์ด๊ฐ ๊ฐ๋ฅํ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ง๋ฌธ ๊ฒ์ํ์์ ์ข์ ์์๋ฅผ ์ฐพ์๋ค. (์ง๋ฌธ ๊ฒ์ํ ํํธ ๊ธ)
- ๋ ธ๋๋ฅผ ๊ตฌ์ฌ, ๊ฐ์ ์ ์ค๋ก ๋น์ ํด์ ์ด๋ ํ ๊ตฌ์ฌ์ ์ก๊ณ ๋์ด๋จ๋ฆฌ๋ฉด ๊ฐ์ฅ ๋จผ ๊ตฌ์ฌ์ด ๋ํ๋๋ค.
- ๊ทธ ๊ตฌ์ฌ์ ์ก๊ณ ๋ค์ ํ ๋ฒ ๋์ด๋จ๋ฆฌ๋ฉด ๊ฐ์ฅ ๋จผ ๊ตฌ์ฌ ๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ํธ๋ฆฌ์ ์ง๋ฆ์ด ๋๋ค.
- ๋ค๋ฅธ ์ ๋ฆฌ๋ก ํฌ์คํ
๊ธ์ ๋ณด์๋ค. (ํ์ด ํฌ์คํ
)
- ๋ฌธ์ ์ ์ฃผ์ด์ง ์์๋ก ์ค๋ช ํด์ฃผ์ จ๋๋ฐ, ๊ฐ ๋ ธ๋ ๋ณ ์ต์ฅ๊ฑฐ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ ์ด๋ณด๋ ํธ๋ฆฌ์ ์ง๋ฆ์ ๋ ธ๋๋ค์ด์๋ค.
- ํธ๋ฆฌ์ ์ง๋ฆ์ด ๋๋๋ฐ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ๋ ๊ฐ์ค์น๋ฅผ ์ง๋ฆ ๋ ธ๋๋ค์ ๋ฐ๋์ ์ง๋๊ณ , ๊ฐ ๋ ธ๋์์ ์ต์ฅ๊ฑฐ๋ฆฌ ๋ ธ๋๋ก ๊ฐ ๋๋ ์ง๋๋ ๊ฒ์ด๋ค. (์๋ฒฝํ ์ค๋ช ์ ์๋๋ค)
- ์๋ฌดํผ ์์์ ๋ ธ๋์์ ์ต์ฅ๊ฑฐ๋ฆฌ ๋ ธ๋๋ฅผ ๊ตฌํ๊ณ , ๋ค์ ํ ๋ฒ ๊ตฌํ๋ฉด ๋๋ค.
- ๊ทธ๋ํ ํ์์ DFS๋ฅผ ์ ํํ๋ ์ด์ ๋ ์ต์ฅ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ ๋น๊ตํ๋ฉฐ ์ฐพ์์ผํ๋, ์ฌ๊ท ์ ๊ฐ๋จํ ๋ฉ๋ชจ์ด์ ์ด์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. BFS๋ ๋น์ฐ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
- ํธ๋ฆฌ์ ๋ํ ๋ ํนํ ํน์ง์ ์ ์ ์์๋ ๋ฌธ์ ์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1504 : ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (0) | 2023.06.28 |
---|---|
BOJ_1238 : ํํฐ (0) | 2023.06.27 |
BOJ_15663 : N๊ณผ M (9) (0) | 2023.06.11 |
BOJ_1043 : ๊ฑฐ์ง๋ง (0) | 2023.06.09 |
BOJ_1149 : RGB๊ฑฐ๋ฆฌ (0) | 2023.06.08 |