- ๋ฑ๋ก๋ ์งํ์ฒ ๋ ธ์ ๋์์ ๊ฒฝ๋ก๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ ๋ฏธ์ ์์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด๋ ๋ฌด๊ดํ๋ค.
- ํ๋ก๊ทธ๋จ ์์ ์ ์ญ, ๋ ธ์ , ๊ตฌ๊ฐ ์ ๋ณด๋ฅผ ์ด๊ธฐ ์ค์ ํด์ผ ํ๋ค.
- ๊ฑฐ๋ฆฌ์ ์์ ์๊ฐ์ ์์ ์ ์์ด๋ฉฐ ๋จ์๋ km์ ๋ถ์ ์๋ฏธํ๋ค.
- ์๋์ ์ฌ์ ๋ฑ๋ก ์ ๋ณด๋ก ๋ฐ๋์ ์ด๊ธฐ ์ค์ ์ ํ๋ค.
1. ์งํ์ฒ ์ญ์ผ๋ก ๊ต๋์ญ, ๊ฐ๋จ์ญ, ์ญ์ผ์ญ, ๋จ๋ถํฐ๋ฏธ๋์ญ, ์์ฌ์ญ, ์์ฌ์๋ฏผ์์ฒ์ญ, ๋งค๋ด์ญ์ด ๋ฑ๋ก๋์ด ์๋ค.
2. ์งํ์ฒ ๋
ธ์ ์ผ๋ก 2ํธ์ , 3ํธ์ , ์ ๋ถ๋น์ ์ด ๋ฑ๋ก๋์ด ์๋ค.
3. ๋
ธ์ ์ ์ญ์ด ์๋์ ๊ฐ์ด ๋ฑ๋ก๋์ด ์๋ค.(์ผ์ชฝ ๋์ด ์ํ ์ข
์ )
- 2ํธ์ : ๊ต๋์ญ - ( 2km / 3๋ถ ) - ๊ฐ๋จ์ญ - ( 2km / 3๋ถ ) - ์ญ์ผ์ญ
- 3ํธ์ : ๊ต๋์ญ - ( 3km / 2๋ถ ) - ๋จ๋ถํฐ๋ฏธ๋์ญ - ( 6km / 5๋ถ ) - ์์ฌ์ญ - ( 1km / 1๋ถ ) - ๋งค๋ด์ญ
- ์ ๋ถ๋น์ : ๊ฐ๋จ์ญ - ( 2km / 8๋ถ ) - ์์ฌ์ญ - ( 10km / 3๋ถ ) - ์์ฌ์๋ฏผ์์ฒ์ญ
- ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ ์ ๋ ฅ๋ฐ์ ๊ฒฝ๋ก๋ฅผ ์กฐํํ๋ค.
- ๊ฒฝ๋ก ์กฐํ ์ ์ด ๊ฑฐ๋ฆฌ, ์ด ์์ ์๊ฐ๋ ํจ๊ป ์ถ๋ ฅํ๋ค.
- ๊ฒฝ๋ก ์กฐํ ๊ธฐ์ค์
์ต๋จ ๊ฑฐ๋ฆฌ
์ต์ ์๊ฐ
์ด ์๋ค.
- ๊ฒฝ๋ก ์กฐํ ์ ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ด ๊ฐ์ผ๋ฉด ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ฒฝ๋ก ์กฐํ ์ ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ด ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฉด ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ทธ ์ธ ์ ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ํ๋์ง ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
ํ๋ก๊ทธ๋๋ฐ ์คํ ๊ฒฐ๊ณผ ์์
์ ๋์ผํ๊ฒ ์ ์ถ๋ ฅ์ ๊ตฌํํ๋ค.- ๊ธฐ๋ํ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋
[INFO]
๋ฅผ ๋ถ์ฌ์ ์ถ๋ ฅํ๋ค. ์ถ๋ ฅ๊ฐ์ ํ์์ ์์์ ๋์ผํ๊ฒ ํ๋ค. - ์๋ฌ ๋ฐ์ ์
[ERROR]
๋ฅผ ๋ถ์ฌ์ ์ถ๋ ฅํ๋ค. ์๋ฌ์ ๋ฌธ๊ตฌ๋ ์์ ๋กญ๊ฒ ์์ฑํ๋ค.
## ๋ฉ์ธ ํ๋ฉด
1. ๊ฒฝ๋ก ์กฐํ
Q. ์ข
๋ฃ
## ์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.
1
## ๊ฒฝ๋ก ๊ธฐ์ค
1. ์ต๋จ ๊ฑฐ๋ฆฌ
2. ์ต์ ์๊ฐ
B. ๋์๊ฐ๊ธฐ
## ์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.
1
## ์ถ๋ฐ์ญ์ ์
๋ ฅํ์ธ์.
๊ต๋์ญ
## ๋์ฐฉ์ญ์ ์
๋ ฅํ์ธ์.
์์ฌ์ญ
## ์กฐํ ๊ฒฐ๊ณผ
[INFO] ---
[INFO] ์ด ๊ฑฐ๋ฆฌ: 4km
[INFO] ์ด ์์ ์๊ฐ: 11๋ถ
[INFO] ---
[INFO] ๊ต๋์ญ
[INFO] ๊ฐ๋จ์ญ
[INFO] ์์ฌ์ญ
## ๋ฉ์ธ ํ๋ฉด
1. ๊ฒฝ๋ก ์กฐํ
Q. ์ข
๋ฃ
...
## ๋ฉ์ธ ํ๋ฉด
1. ๊ฒฝ๋ก ์กฐํ
Q. ์ข
๋ฃ
## ์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.
1
## ๊ฒฝ๋ก ๊ธฐ์ค
1. ์ต๋จ ๊ฑฐ๋ฆฌ
2. ์ต์ ์๊ฐ
B. ๋์๊ฐ๊ธฐ
## ์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.
1
## ์ถ๋ฐ์ญ์ ์
๋ ฅํ์ธ์.
๊ฐ๋จ์ญ
## ๋์ฐฉ์ญ์ ์
๋ ฅํ์ธ์.
๊ฐ๋จ์ญ
[ERROR] ์ถ๋ฐ์ญ๊ณผ ๋์ฐฉ์ญ์ด ๋์ผํฉ๋๋ค.
## ๊ฒฝ๋ก ๊ธฐ์ค
1. ์ต๋จ ๊ฑฐ๋ฆฌ
2. ์ต์ ์๊ฐ
B. ๋์๊ฐ๊ธฐ
## ์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.
...
- ์๋ฐ ์ฝ๋ ์ปจ๋ฒค์
์ ์งํค๋ฉด์ ํ๋ก๊ทธ๋๋ฐํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Google Java Style Guide์ ์์น์ผ๋ก ํ๋ค.
- ๋จ, ๋ค์ฌ์ฐ๊ธฐ๋ '2 spaces'๊ฐ ์๋ '4 spaces'๋ก ํ๋ค.
- indent(์ธ๋ดํธ, ๋ค์ฌ์ฐ๊ธฐ) depth๋ฅผ 3์ด ๋์ง ์๋๋ก ๊ตฌํํ๋ค. 2๊น์ง๋ง ํ์ฉํ๋ค.
- ์๋ฅผ ๋ค์ด while๋ฌธ ์์ if๋ฌธ์ด ์์ผ๋ฉด ๋ค์ฌ์ฐ๊ธฐ๋ 2์ด๋ค.
- ํํธ: indent(์ธ๋ดํธ, ๋ค์ฌ์ฐ๊ธฐ) depth๋ฅผ ์ค์ด๋ ์ข์ ๋ฐฉ๋ฒ์ ํจ์(๋๋ ๋ฉ์๋)๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋๋ค.
- 3ํญ ์ฐ์ฐ์๋ฅผ ์ฐ์ง ์๋๋ค.
- ํจ์(๋๋ ๋ฉ์๋)์ ๊ธธ์ด๊ฐ 15๋ผ์ธ์ ๋์ด๊ฐ์ง ์๋๋ก ๊ตฌํํ๋ค.
- ํจ์(๋๋ ๋ฉ์๋)๊ฐ ํ ๊ฐ์ง ์ผ๋ง ์ ํ๋๋ก ๊ตฌํํ๋ค.
- else ์์ฝ์ด๋ฅผ ์ฐ์ง ์๋๋ค.
- ํํธ: if ์กฐ๊ฑด์ ์์ ๊ฐ์ returnํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด else๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- else๋ฅผ ์ฐ์ง ๋ง๋ผ๊ณ ํ๋ switch/case๋ก ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ switch/case๋ ํ์ฉํ์ง ์๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ์ฌํญ์์ ๋ณ๋๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ ์๋ด๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ผ ์์ ๊ณผ ํจํค์ง ์ด๋์ ์์ ๋กญ๊ฒ ํ ์ ์๋ค.
- ์์ธ ์ํฉ ์ ์๋ฌ ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค. ๋จ, ์๋ฌ ๋ฌธ๊ตฌ๋
[ERROR]
๋ก ์์ํด์ผ ํ๋ค.
- Application ํด๋์ค๋ฅผ ํ์ฉํด ๊ตฌํํด์ผ ํ๋ค.
- Application์ ํจํค์ง ๊ตฌ์กฐ๋ ๋ณ๊ฒฝํ์ง ์๋๋ค.
- Application ํด๋์ค์ ์๋ Scanner๋ฅผ ์ฌ์ฉํ๊ณ ๋ณ๋์ Scanner ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๋๋ค.
public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
...
}
}
- Station, Line ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ์งํ์ฒ ์ญ๊ณผ ๋ ธ์ ์ ๊ตฌํํด์ผ ํ๋ค.
- ์ ๊ณตํ๋ ๊ฐ ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
- ํ๋(์ธ์คํด์ค ๋ณ์)์ธ name์ ์ ๊ทผ ์ ์ด์ private์ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๊ฐ๋ฅํ๋ฉด setter ๋ฉ์๋(ex. setXXX)๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ๊ตฌํํ๋ค.
public class Station {
private String name;
public Station(String name) {
this.name = name;
}
public String getName() {
return name;
}
// ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
}
- Station๊ณผ Line์ ์ํ๋ฅผ ์ ์ฅํ ์ ์๋ StationRepository, LineRepository๋ฅผ ์ ๊ณตํ๋ค.
- ํ์ ์ StationRepository, LineRepository ์ด ์ธ ์ถ๊ฐ๋ก Repository๋ฅผ ๋ง๋ค ์ ์๋ค.
- ์ถ๊ฐ๋ก ์์ฑ๋๋ ๊ฐ์ฒด์ ๋ํด์ XXXRepository ๋ค์ด๋ฐ์ผ๋ก ์ ์ฅ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค.
- ๊ฐ์ฒด๋ค์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์ XXXRepository ํด๋์ค๋ฅผ ํ์ฉํด ์ ์ฅ ๋ก์ง์ ๊ตฌํํด์ผ ํ๋ค.
- ์์ฑ๋ ๋ฉ์๋๋ ์์ ํ ์ ์๊ณ , ํ์์ ๋ฐ๋ผ ๋ฉ์๋๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐํ ์ ์๋ค.
public class StationRepository {
private static final List<Station> stations = new ArrayList<>();
public static List<Station> stations() {
return Collections.unmodifiableList(stations);
}
public static void addStation(Station station) {
stations.add(station);
}
public static boolean deleteStation(String name) {
return stations.removeIf(station -> Objects.equals(station.getName(), name));
}
public static void deleteAll() {
stations.clear();
}
}
- jgrapht ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์กฐํํ ์ ์์
- Dijkstra ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋์ ์ดํดํ ํ์๋ ์๊ณ ๋ฏธ์ ์ ์ ์ฉํ ์ ๋๋ก๋ง ์ดํดํ๋ฉด ๋จ
- JGraphtTest ํด๋์ค์ ํ ์คํธ๋ฅผ ํ์ฉํ์ฌ ๋ฏธ์ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ํ์ตํ ์ ์์
- ์ ์ (vertex)๊ณผ ๊ฐ์ (edge), ๊ทธ๋ฆฌ๊ณ ๊ฐ์ค์น ๊ฐ๋
์ ์ด์ฉ
- ์ ์ : ์งํ์ฒ ์ญ
- ๊ฐ์ : ์งํ์ฒ ์ญ ์ฐ๊ฒฐ์ ๋ณด
- ๊ฐ์ค์น: ๊ฑฐ๋ฆฌ or ์์ ์๊ฐ
- ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธฐ์ค ์กฐํ ์ ๊ฐ์ค์น๋ฅผ ๊ฑฐ๋ฆฌ๋ก ์ค์
@Test
public void getDijkstraShortestPath() {
WeightedMultigraph<String, DefaultWeightedEdge> graph
= new WeightedMultigraph(DefaultWeightedEdge.class);
graph.addVertex("v1");
graph.addVertex("v2");
graph.addVertex("v3");
graph.setEdgeWeight(graph.addEdge("v1", "v2"), 2);
graph.setEdgeWeight(graph.addEdge("v2", "v3"), 2);
graph.setEdgeWeight(graph.addEdge("v1", "v3"), 100);
DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(graph);
List<String> shortestPath = dijkstraShortestPath.getPath("v3", "v1").getVertexList();
assertThat(shortestPath.size()).isEqualTo(3);
}
- ์ญ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ง ์๋ ๊ฒฝ์ฐ V1->V3 ๊ฒฝ๋ก๊ฐ ์ต๋จ ๊ฒฝ๋ก
- ์ญ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ๋ คํ ๊ฒฝ์ฐ V1->V3 ๊ฒฝ๋ก์ ๊ฑฐ๋ฆฌ๋ 100km, V1->V2->V3 ๊ฒฝ๋ก์ ๊ฑฐ๋ฆฌ๋ 4km์ด๋ฏ๋ก ์ต๋จ ๊ฒฝ๋ก๋ V1->V2->V3
- ๋ฏธ์ ์ java-subway-path-precourse ์ ์ฅ์ ๋ฅผ fork/cloneํด ์์ํ๋ค.
- ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์ java-subway-path-precourse/docs/README.md ํ์ผ์ ๊ตฌํํ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์ ๋ฆฌํด ์ถ๊ฐํ๋ค.
- git์ commit ๋จ์๋ ์ ๋จ๊ณ์์ README.md ํ์ผ์ ์ ๋ฆฌํ ๊ธฐ๋ฅ ๋ชฉ๋ก ๋จ์๋ก ์ถ๊ฐํ๋ค.
- AngularJS Commit Message Conventions ์ฐธ๊ณ ํด commit log๋ฅผ ๋จ๊ธด๋ค.
- ํ๋ฆฌ์ฝ์ค ๊ณผ์ ์ ์ถ ๋ฌธ์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ ๋ฏธ์
์ ์ ์ถํ๋ค.
- ํ๋ฆฌ์ฝ์ค ๊ณผ์ FAQ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์งํํ ์ ์๋ค.
This project is MIT licensed.