Tags
- Java
- ๊ตฌํ
- CodingTest
- LV2
- ๋ฌธ์์ด
- ๊ทธ๋ํ ์ด๋ก
- BFS
- ์ ๋ ฌ
- ์๋ฃ๊ตฌ์กฐ
- ์ํ
- ๋๋น ์ฐ์ ํ์
- BOJ
- sort
- ์ ์๋ก
- Brute Force Algorithm
- Dynamic Programming
- Python
- ๊น์ด ์ฐ์ ํ์
- stack
- ์๋ฎฌ๋ ์ด์
- queue
- PGM
- dfs
- ๋ฐฑํธ๋ํน
- greedy
- ๊ทธ๋ํ ํ์
- DP
- ๊ต์ฌ
- Study
- SpringBoot
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_11657 : ํ์๋จธ์ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ๋์์ M๊ฐ์ ๋ฒ์ค๊ฐ ์ฃผ์ด์ง๋ค. 1๋ฒ ๋์์์ ๋๋จธ์ง ๋์๋ก ๊ฐ๋ ์ต๋จ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๋ฒ์ค๋ ์์ ๋์, ๋์ฐฉ ๋์, ์ด๋ ์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ด๋ ์๊ฐ์ ์ ์๋ก ์ฃผ์ด์ง๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๊ทธ๋ํ์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ณ , ์์ ๊ฐ์ค์น๊ฐ ์์ผ๋ฏ๋ก ๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ค.
- N๋ฒ ๋ง๋ค M๊ฐ์ ๊ฐ์ ์ ๋ชจ๋ ๊ฒ์ฌํ๋ฏ๋ก, ์๊ฐ ๋ณต์ก๋๋ O(NM)์ด๋ค.
- ์ด๋ ์๊ฐ์ ์ต๋๊ฐ์ 499 * 10,000 ์ผ๋ก, ์ฝ 5,000,000 ๊น์ง ์ปค์ง๋ฏ๋ก intํ์ผ๋ก ์ฒ๋ฆฌ ๋๋ค.
(๋ ธ๋๊ฐ ์ผ๋ ฌ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ์์ง์ ์ต๋ ๊ฐ์ธ 10,000์ผ๋ก๋ง ์ฐ๊ฒฐ ๋ ๊ฒฝ์ฐ) - ์ด๋ ์๊ฐ์ ์ต์๊ฐ์ 500 * 6,000 * -10,000 ์ผ๋ก, -3,000,000,000(-30์ต) ๊น์ง ์ปค์ง๋ฏ๋ก intํ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์ long์ ์๋ฃํ์ด ํ์ํ๋ค.
(์์ ์ฌ์ดํด์ด ์์ด์ N*M ๋์ ๊ฐ์ค์น์ ์ต์๊ฐ์ธ -10,000์ด ๋์ ๋ ๊ฒฝ์ฐ)
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
long[] dist = new long[N + 1];
Edge[] edges = new Edge[M];
for (int i = 1; i <= N; i++) {
dist[i] = Integer.MAX_VALUE;
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
edges[i] = new Edge(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
}
// Bellman-ford-moore
dist[1] = 0;
boolean minusCircle = false;
for (int i = 1; i <= N; i++) {
for (int j = 0; j < M; j++) {
if (dist[edges[j].start] == Integer.MAX_VALUE) // ์ฃ์ง ์์ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ ์ (๋ฌดํ๋)์ด๋ฉด ํต๊ณผ
continue;
if (dist[edges[j].end] > dist[edges[j].start] + edges[j].cost) {
dist[edges[j].end] = dist[edges[j].start] + edges[j].cost;
if (i == N) {
minusCircle = true;
}
}
}
}
// Output
if (minusCircle)
bw.write("-1");
else {
StringBuilder sb = new StringBuilder();
for (int i = 2; i <= N; i++) {
if (dist[i] == Integer.MAX_VALUE)
sb.append("-1");
else
sb.append(dist[i]);
sb.append('\n');
}
bw.write(sb.toString().stripTrailing());
}
bw.flush();
}
private static class Edge {
int start, end, cost;
public Edge(int start, int end, int cost) {
this.start = start;
this.end = end;
this.cost = cost;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ฐ์ ํํ์ ์ํด ์์ ๋ ธ๋, ๋์ฐฉ ๋ ธ๋, ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ Edge ํด๋์ค๋ฅผ ์ ์ํด ์ฌ์ฉํ๋ค.
- ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด์ ์์ ์ฌ์ดํด์ด ์์ผ๋ฉด -1, ์๋ค๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ตํ ์ ์๋ ๊ธฐํ๊ฐ ๋์ด์ ํฌ์คํ ์ผ๋ก ์ ๋ฆฌํ๋ค.
- ์ต๋จ ๊ฑฐ๋ฆฌ์ ์ต๋ ์ต์๊ฐ์ ๊ณ์ฐํด๋ณด์ง ์์์ ์ค๋ฒํ๋ก์ฐ๋ก '์ถ๋ ฅ ์ด๊ณผ'๊ฐ ๋ ์ ํ๋ ธ๋ค.
- ์ฒ์์ ๋์ ๊ณต๋ฐฑ(' ')์ด ๋ค์ด๊ฐ์ ํ๋ ธ๋, strip์ ๋ฃ์ด๋ดค์ง๋ง ์ฌ์ ํ๋ค.
- ์ง๋ฌธํ๊ธฐ๋ฅผ ๋ณด๋, ์ต์๊ฐ์ด ์์ ์ฌ์ดํด์ ํ๋ฉด -30์ต๊น์ง ๊ฐ ์ ์์ด์ long์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ต๋ ์ต์ ์ฃ์ง์ผ์ด์ค๋ฅผ ๊ผญ ๋ฐ์ ธ๋ณด๋ ์ต๊ด์ ๋ค์ฌ์ผ ๊ฒ ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_5052 : ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.05.19 |
---|---|
BOJ_1915 : ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ (0) | 2024.05.11 |
BOJ_1261 : ์๊ณ ์คํ (0) | 2024.05.10 |
BOJ_1339 : ๋จ์ด ์ํ (0) | 2024.05.06 |
BOJ_14002 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 (0) | 2024.05.01 |