From bd3cddf1cc3201f721d532d7b4ab266100cc0d63 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:08:51 +0900 Subject: [PATCH 01/34] =?UTF-8?q?docs:=20docs/README=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..04a8883f4 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +# 지하철 노선도 경로 조회 미션 \ No newline at end of file From 2833e4d11ba038f24baf10b39eba14aa001f3670 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:31:16 +0900 Subject: [PATCH 02/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 04a8883f4..e2a7d101f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1 +1,33 @@ -# 지하철 노선도 경로 조회 미션 \ No newline at end of file +# 지하철 노선도 경로 조회 미션 +우테코 3기 2차 코딩테스트(2020-12-19 13:00 ~ 18:00) + +## 기능 구현 목록 +* **입력** + + [메인 화면] + - [ ] 원하는 기능을 입력한다. + + [경로 조회] + - [ ] 경로기준을 입력한다. + - [ ] 출발역과 도착역을 입력한다. +* **처리** + + [초기화] + + [ ] 지하철(Station) 초기 정보를 저장한다. + + [ ] 노선(Line) 초기 정보를 저장한다. + + [ ] 노선에 연결된 역 초기 정보를 저장한다. + + [메인 화면] + - [ ] 메인 화면의 메뉴를 선택한다. + - [예외 처리] 선택 가능한 기능인지 검증한다. + + [경로 조회] + + [ ] 경로 기준을 선택한다. + - [예외 처리] 선택 가능한 기능인지 검증한다. + + [ ] 경로를 조회한다. + - [예외 처리] 출발역이 존재하는지 검증한다. + - [예외 처리] 도착역이 존재하는지 검증한다. + - [예외 처리] 출발역과 도착역이 같은지 검증한다. + - [예외 처리] 출발역과 도착역이 연결되어있는지 검증한다. + + [ ] 경로의 총 거리를 계산한다. + + [ ] 경로의 총 소요 시간을 계산한다. +* **출력** + + [경로 조회] + - [ ] 총 거리를 출력한다 + - [ ] 총 소요 시간을 출력한다. + - [ ] 출발역 부터 도착역까지 역을 출력한다. \ No newline at end of file From 88f7e81c18848c4a29285e794d79ee8e83b6778a Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:34:18 +0900 Subject: [PATCH 03/34] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=EB=8F=84=20=EA=B2=BD=EB=A1=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EB=A5=BC=20=EC=8B=9C=EC=9E=91=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 6 +++++- src/main/java/subway/controller/SubwayController.java | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/SubwayController.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..53306cdc3 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,14 @@ package subway; +import subway.controller.SubwayController; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + SubwayController subway = new SubwayController(); + subway.start(scanner); } -} +} \ No newline at end of file diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java new file mode 100644 index 000000000..34cfab82d --- /dev/null +++ b/src/main/java/subway/controller/SubwayController.java @@ -0,0 +1,9 @@ +package subway.controller; + +import java.util.Scanner; + +public class SubwayController { + + public void start(Scanner scanner) { + } +} \ No newline at end of file From af1d966e964b486a89afa57f676b1bca3d7adc59 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:36:39 +0900 Subject: [PATCH 04/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index e2a7d101f..cdadb8590 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,6 +27,9 @@ + [ ] 경로의 총 거리를 계산한다. + [ ] 경로의 총 소요 시간을 계산한다. * **출력** + + [메인 화면] + - [ ] 메인 화면을 출력한다. + - [ ] 경로 조회 화면을 출력한다. + [경로 조회] - [ ] 총 거리를 출력한다 - [ ] 총 소요 시간을 출력한다. From efa93874dbcb67d60e59d3ab75aff09747ca388c Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:41:29 +0900 Subject: [PATCH 05/34] =?UTF-8?q?feat:=20=EC=9B=90=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=9E=85=EB=A0=A5=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/InputView.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/subway/view/InputView.java diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..1b488ee83 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,9 @@ +package subway.view; + +public class InputView { + private static final char NEW_LINE = '\n'; + + public void inputSelectMenuMessage() { + System.out.println(NEW_LINE+"## 원하는 기능을 선택하세요."); + } +} \ No newline at end of file From 0baef33ac6900a0d5b84af65ed46b51689ed4db9 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:42:36 +0900 Subject: [PATCH 06/34] =?UTF-8?q?feat:=20=EC=B6=9C=EB=B0=9C=EC=97=AD?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=84=EC=B0=A9=EC=97=AD=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/InputView.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 1b488ee83..abc8ccba5 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -6,4 +6,12 @@ public class InputView { public void inputSelectMenuMessage() { System.out.println(NEW_LINE+"## 원하는 기능을 선택하세요."); } + + public void inputStartStationNameMessage() { + System.out.println(NEW_LINE+"## 출발역을 입력하세요."); + } + + public void inputEndStationNameMessage() { + System.out.println(NEW_LINE+"## 도착역을 입력하세요."); + } } \ No newline at end of file From 2f1486f6f8d1a78950c59316ee790ac9c1dbcb02 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:46:55 +0900 Subject: [PATCH 07/34] =?UTF-8?q?feat:=20=EC=9B=90=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/InputService.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/subway/service/InputService.java diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java new file mode 100644 index 000000000..4cd053807 --- /dev/null +++ b/src/main/java/subway/service/InputService.java @@ -0,0 +1,14 @@ +package subway.service; + +import subway.view.InputView; + +import java.util.Scanner; + +public class InputService extends InputView { + + public String inputSelectMenu(Scanner scanner) { + inputSelectMenuMessage(); + String menu = scanner.nextLine(); + return menu; + } +} \ No newline at end of file From 241ae3a63ff46b29a140d0f2b742ee3d005e5a64 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:48:18 +0900 Subject: [PATCH 08/34] =?UTF-8?q?feat:=20=EC=B6=9C=EB=B0=9C=EC=97=AD?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=84=EC=B0=A9=EC=97=AD=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/InputService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java index 4cd053807..c33b5a3df 100644 --- a/src/main/java/subway/service/InputService.java +++ b/src/main/java/subway/service/InputService.java @@ -11,4 +11,16 @@ public String inputSelectMenu(Scanner scanner) { String menu = scanner.nextLine(); return menu; } + + public String inputStartStationName(Scanner scanner) { + inputStartStationNameMessage(); + String stationName = scanner.nextLine(); + return stationName; + } + + public String inputEndStationName(Scanner scanner) { + inputEndStationNameMessage(); + String stationName = scanner.nextLine(); + return stationName; + } } \ No newline at end of file From 4a8ed06ec38c8a56b9a4f141697cd2df42b054af Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:50:53 +0900 Subject: [PATCH 09/34] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/OutputView.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/subway/service/OutputView.java diff --git a/src/main/java/subway/service/OutputView.java b/src/main/java/subway/service/OutputView.java new file mode 100644 index 000000000..72a8d80ed --- /dev/null +++ b/src/main/java/subway/service/OutputView.java @@ -0,0 +1,11 @@ +package subway.service; + +public class OutputView { + private static final char NEW_LINE = '\n'; + + public void printMainMenu() { + System.out.println(NEW_LINE+"## 메인 화면"); + System.out.println("1. 경로 조회"); + System.out.println("Q. 종료"); + } +} \ No newline at end of file From dd52c137203affc4896a3e3f17852549f1084d11 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:52:36 +0900 Subject: [PATCH 10/34] =?UTF-8?q?feat:=20=EA=B2=BD=EB=A1=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/OutputView.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/service/OutputView.java b/src/main/java/subway/service/OutputView.java index 72a8d80ed..97271d2e7 100644 --- a/src/main/java/subway/service/OutputView.java +++ b/src/main/java/subway/service/OutputView.java @@ -8,4 +8,11 @@ public void printMainMenu() { System.out.println("1. 경로 조회"); System.out.println("Q. 종료"); } + + public void printSearchPathMenu() { + System.out.println(NEW_LINE+"## 경로 기준"); + System.out.println("1. 최단 거리"); + System.out.println("2. 최소 시간"); + System.out.println("B. 돌아가기"); + } } \ No newline at end of file From 8eaea59d97f80689d9754525df6841e3b64ee492 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 13:53:43 +0900 Subject: [PATCH 11/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C=20=ED=99=95=EC=9D=B8=20=EB=B0=8F?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index cdadb8590..9a42bc9ba 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,10 +4,10 @@ ## 기능 구현 목록 * **입력** + [메인 화면] - - [ ] 원하는 기능을 입력한다. + - [x] 원하는 기능을 입력한다. + [경로 조회] - - [ ] 경로기준을 입력한다. - - [ ] 출발역과 도착역을 입력한다. + - [x] 원하는 기능을 입력한다. + - [x] 출발역과 도착역을 입력한다. * **처리** + [초기화] + [ ] 지하철(Station) 초기 정보를 저장한다. @@ -28,9 +28,9 @@ + [ ] 경로의 총 소요 시간을 계산한다. * **출력** + [메인 화면] - - [ ] 메인 화면을 출력한다. - - [ ] 경로 조회 화면을 출력한다. + - [x] 메인 화면을 출력한다. + [경로 조회] + - [x] 경로 조회 화면을 출력한다. - [ ] 총 거리를 출력한다 - [ ] 총 소요 시간을 출력한다. - [ ] 출발역 부터 도착역까지 역을 출력한다. \ No newline at end of file From e44a9375ef1d80a66203a74345ac0fc553ce8b79 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:10:24 +0900 Subject: [PATCH 12/34] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- .../java/subway/domain/SubwayPathFactory.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/domain/SubwayPathFactory.java diff --git a/docs/README.md b/docs/README.md index 9a42bc9ba..10ce04a69 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@ - [x] 출발역과 도착역을 입력한다. * **처리** + [초기화] - + [ ] 지하철(Station) 초기 정보를 저장한다. + + [x] 지하철(Station) 초기 정보를 저장한다. + [ ] 노선(Line) 초기 정보를 저장한다. + [ ] 노선에 연결된 역 초기 정보를 저장한다. + [메인 화면] diff --git a/src/main/java/subway/domain/SubwayPathFactory.java b/src/main/java/subway/domain/SubwayPathFactory.java new file mode 100644 index 000000000..9dddb1394 --- /dev/null +++ b/src/main/java/subway/domain/SubwayPathFactory.java @@ -0,0 +1,18 @@ +package subway.domain; + +public class SubwayPathFactory { + + public static void init() { + initStation(); + } + + private static void initStation() { + StationRepository.addStation(new Station("교대역")); + StationRepository.addStation(new Station("강남역")); + StationRepository.addStation(new Station("역삼역")); + StationRepository.addStation(new Station("남부터미널역")); + StationRepository.addStation(new Station("양재역")); + StationRepository.addStation(new Station("양재시민의숲역")); + StationRepository.addStation(new Station("매봉역")); + } +} \ No newline at end of file From 2f1add91a9a44c79e731cadc9a0f86223f029524 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:11:18 +0900 Subject: [PATCH 13/34] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/SubwayPathFactory.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/domain/SubwayPathFactory.java b/src/main/java/subway/domain/SubwayPathFactory.java index 9dddb1394..7d66f1f95 100644 --- a/src/main/java/subway/domain/SubwayPathFactory.java +++ b/src/main/java/subway/domain/SubwayPathFactory.java @@ -4,6 +4,7 @@ public class SubwayPathFactory { public static void init() { initStation(); + initLine(); } private static void initStation() { @@ -15,4 +16,10 @@ private static void initStation() { StationRepository.addStation(new Station("양재시민의숲역")); StationRepository.addStation(new Station("매봉역")); } + + private static void initLine() { + LineRepository.addLine(new Line("2호선")); + LineRepository.addLine(new Line("3호선")); + LineRepository.addLine(new Line("신분당선")); + } } \ No newline at end of file From 6fe35612e6dd615a64320a4db6214e466a24551b Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:14:41 +0900 Subject: [PATCH 14/34] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EA=B4=80=EB=A6=AC=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/Section.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/subway/domain/Section.java diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java new file mode 100644 index 000000000..3b16651e6 --- /dev/null +++ b/src/main/java/subway/domain/Section.java @@ -0,0 +1,19 @@ +package subway.domain; + +public class Section { + private int time; + private int distance; + + public Section(int time, int distance) { + this.time = time; + this.distance = distance; + } + + public int getTime() { + return time; + } + + public int getDistance() { + return distance; + } +} \ No newline at end of file From 7e9faa8207599de0a3a5524979ee6cabf9b0dae5 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:41:12 +0900 Subject: [PATCH 15/34] =?UTF-8?q?feat:=20=EB=A9=94=EB=89=B4=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EA=B4=80=EB=A6=AC=20=EA=B0=9D=EC=B2=B4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/MenuType.java | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/subway/domain/MenuType.java diff --git a/src/main/java/subway/domain/MenuType.java b/src/main/java/subway/domain/MenuType.java new file mode 100644 index 000000000..812839763 --- /dev/null +++ b/src/main/java/subway/domain/MenuType.java @@ -0,0 +1,25 @@ +package subway.domain; + +import java.util.Arrays; +import java.util.List; + +public enum MenuType { + MAIN_MENU_RANGE(Arrays.asList("1","2","Q")), + MAIN_SEARCH_PATH("1"), + MAIN_EXIT("Q"), + SEARCH_PATH_MENU_RANGE(Arrays.asList("1","2","B")), + SEARCH_SHORTEST_PATH("1"), + SEARCH_SHORTEST_TIME("2"), + BACK("B"); + + private String key; + private List keys; + + private MenuType(String key) { + this.key = key; + } + + private MenuType(List keys) { + this.keys = keys; + } +} \ No newline at end of file From 02e90b7e630bedc0d7111fd022e1b70491627144 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:45:37 +0900 Subject: [PATCH 16/34] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=9C=20=EA=B8=B0=EB=8A=A5=EC=9D=B8=EC=A7=80=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/MenuType.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/MenuType.java b/src/main/java/subway/domain/MenuType.java index 812839763..6995248d5 100644 --- a/src/main/java/subway/domain/MenuType.java +++ b/src/main/java/subway/domain/MenuType.java @@ -3,7 +3,7 @@ import java.util.Arrays; import java.util.List; -public enum MenuType { +public enum MenuType { MAIN_MENU_RANGE(Arrays.asList("1","2","Q")), MAIN_SEARCH_PATH("1"), MAIN_EXIT("Q"), @@ -22,4 +22,11 @@ private MenuType(String key) { private MenuType(List keys) { this.keys = keys; } + + public void validateMenuRange(String menu) { + boolean isContains = this.keys.contains(menu); + if (!isContains) { + throw new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다."); + } + } } \ No newline at end of file From 7bd8eebf9938f9a6b0b751169997cf119115d61e Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 14:59:57 +0900 Subject: [PATCH 17/34] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9D=98=20=EB=A9=94=EB=89=B4=EB=A5=BC=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/SubwayController.java | 18 ++++++++++++++++++ src/main/java/subway/domain/MenuType.java | 4 ++++ src/main/java/subway/service/OutputView.java | 4 ++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 34cfab82d..bf8edd448 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -1,9 +1,27 @@ package subway.controller; +import subway.domain.MenuType; +import subway.service.InputService; +import subway.service.OutputView; +import subway.service.SubwayService; + import java.util.Scanner; public class SubwayController { + private final InputService inputService = new InputService(); + private final SubwayService subwayService = new SubwayService(); public void start(Scanner scanner) { + String menu = ""; + try { + while (!MenuType.MAIN_EXIT.isKeyEquals(menu)) { + OutputView.printMainMenu(); + menu = inputService.inputSelectMenu(scanner); + subwayService.selectMainMenu(scanner, menu); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + start(scanner); + } } } \ No newline at end of file diff --git a/src/main/java/subway/domain/MenuType.java b/src/main/java/subway/domain/MenuType.java index 6995248d5..cf4a86d56 100644 --- a/src/main/java/subway/domain/MenuType.java +++ b/src/main/java/subway/domain/MenuType.java @@ -23,6 +23,10 @@ private MenuType(List keys) { this.keys = keys; } + public boolean isKeyEquals(String menu) { + return this.key.equals(menu); + } + public void validateMenuRange(String menu) { boolean isContains = this.keys.contains(menu); if (!isContains) { diff --git a/src/main/java/subway/service/OutputView.java b/src/main/java/subway/service/OutputView.java index 97271d2e7..6a71d185b 100644 --- a/src/main/java/subway/service/OutputView.java +++ b/src/main/java/subway/service/OutputView.java @@ -3,13 +3,13 @@ public class OutputView { private static final char NEW_LINE = '\n'; - public void printMainMenu() { + public static void printMainMenu() { System.out.println(NEW_LINE+"## 메인 화면"); System.out.println("1. 경로 조회"); System.out.println("Q. 종료"); } - public void printSearchPathMenu() { + public static void printSearchPathMenu() { System.out.println(NEW_LINE+"## 경로 기준"); System.out.println("1. 최단 거리"); System.out.println("2. 최소 시간"); From db867edecaaa3f1344492e6d1914c00ca8f784b7 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:00:53 +0900 Subject: [PATCH 18/34] =?UTF-8?q?test:=20=EA=B2=BD=EB=A1=9C=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=EC=9D=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/LineStationTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/test/java/subway/domain/LineStationTest.java diff --git a/src/test/java/subway/domain/LineStationTest.java b/src/test/java/subway/domain/LineStationTest.java new file mode 100644 index 000000000..baf53ff48 --- /dev/null +++ b/src/test/java/subway/domain/LineStationTest.java @@ -0,0 +1,37 @@ +package subway.domain; + +import org.jgrapht.GraphPath; +import org.jgrapht.alg.shortestpath.DijkstraShortestPath; +import org.jgrapht.graph.DefaultWeightedEdge; +import org.jgrapht.graph.WeightedMultigraph; +import org.junit.jupiter.api.Test; + +class LineStationTest { + + @Test + public void 구간_정보를_등록한다() throws Exception { + //given + WeightedMultigraph lineStation + = new WeightedMultigraph<>(DefaultWeightedEdge.class); + Station s1 = new Station("강남역"); + Station s2 = new Station("양재역"); + Station s3 = new Station("홍대역"); + + lineStation.addVertex(s1); + lineStation.addVertex(s2); + lineStation.addVertex(s3); + lineStation.setEdgeWeight(lineStation.addEdge(s1,s2), 2); + lineStation.setEdgeWeight(lineStation.addEdge(s2,s3), 2); + lineStation.setEdgeWeight(lineStation.addEdge(s1,s3), 100); + + //when + DijkstraShortestPath result = new DijkstraShortestPath(lineStation); + GraphPath path = result.getPath(s1, s3); + System.out.println(path.getWeight()); + //then + for (Object station : path.getEdgeList()) { + System.out.println(station.toString()); + } + System.out.println(path.toString()); + } +} \ No newline at end of file From c4e4e0ed94bdb44cc0adbe6e0604e9a51b6699c9 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:04:51 +0900 Subject: [PATCH 19/34] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=20=EB=A9=94=EB=89=B4=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 에러 메시지 개행 추가 --- src/main/java/subway/controller/SubwayController.java | 4 +++- src/main/java/subway/domain/MenuType.java | 2 +- src/main/java/subway/service/InputService.java | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index bf8edd448..18c155bd6 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -7,6 +7,8 @@ import java.util.Scanner; +import static subway.domain.MenuType.MAIN_MENU_RANGE; + public class SubwayController { private final InputService inputService = new InputService(); private final SubwayService subwayService = new SubwayService(); @@ -16,7 +18,7 @@ public void start(Scanner scanner) { try { while (!MenuType.MAIN_EXIT.isKeyEquals(menu)) { OutputView.printMainMenu(); - menu = inputService.inputSelectMenu(scanner); + menu = inputService.inputSelectMenu(scanner, MAIN_MENU_RANGE); subwayService.selectMainMenu(scanner, menu); } } catch (IllegalArgumentException e) { diff --git a/src/main/java/subway/domain/MenuType.java b/src/main/java/subway/domain/MenuType.java index cf4a86d56..14c985ba8 100644 --- a/src/main/java/subway/domain/MenuType.java +++ b/src/main/java/subway/domain/MenuType.java @@ -30,7 +30,7 @@ public boolean isKeyEquals(String menu) { public void validateMenuRange(String menu) { boolean isContains = this.keys.contains(menu); if (!isContains) { - throw new IllegalArgumentException("[ERROR] 선택할 수 없는 기능입니다."); + throw new IllegalArgumentException("\n[ERROR] 선택할 수 없는 기능입니다."); } } } \ No newline at end of file diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java index c33b5a3df..aad035ff6 100644 --- a/src/main/java/subway/service/InputService.java +++ b/src/main/java/subway/service/InputService.java @@ -1,14 +1,16 @@ package subway.service; +import subway.domain.MenuType; import subway.view.InputView; import java.util.Scanner; public class InputService extends InputView { - public String inputSelectMenu(Scanner scanner) { + public String inputSelectMenu(Scanner scanner, MenuType menuType) { inputSelectMenuMessage(); String menu = scanner.nextLine(); + menuType.validateMenuRange(menu); return menu; } From 1c01a9068f51b727136aefd1c5bb928f2ac43a5e Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:11:05 +0900 Subject: [PATCH 20/34] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=EC=9D=98=20=EB=A9=94=EB=89=B4=EB=A5=BC=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 경로 조회 --- .../subway/controller/SubwayController.java | 5 ++-- .../subway/service/SearchPathService.java | 10 +++++++ .../java/subway/service/SubwayService.java | 30 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/service/SearchPathService.java create mode 100644 src/main/java/subway/service/SubwayService.java diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 18c155bd6..f65e5e46a 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -9,8 +9,7 @@ import static subway.domain.MenuType.MAIN_MENU_RANGE; -public class SubwayController { - private final InputService inputService = new InputService(); +public class SubwayController extends InputService { private final SubwayService subwayService = new SubwayService(); public void start(Scanner scanner) { @@ -18,7 +17,7 @@ public void start(Scanner scanner) { try { while (!MenuType.MAIN_EXIT.isKeyEquals(menu)) { OutputView.printMainMenu(); - menu = inputService.inputSelectMenu(scanner, MAIN_MENU_RANGE); + menu = inputSelectMenu(scanner, MAIN_MENU_RANGE); subwayService.selectMainMenu(scanner, menu); } } catch (IllegalArgumentException e) { diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java new file mode 100644 index 000000000..43e9c043a --- /dev/null +++ b/src/main/java/subway/service/SearchPathService.java @@ -0,0 +1,10 @@ +package subway.service; + +import java.util.Scanner; + +public class SearchPathService { + + public boolean selectSearchPathMenu(Scanner scanner) { + return false; + } +} \ No newline at end of file diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java new file mode 100644 index 000000000..810e43af5 --- /dev/null +++ b/src/main/java/subway/service/SubwayService.java @@ -0,0 +1,30 @@ +package subway.service; + +import java.util.Scanner; + +import static subway.domain.MenuType.MAIN_SEARCH_PATH; +import static subway.domain.MenuType.SEARCH_PATH_MENU_RANGE; +import static subway.service.OutputView.printSearchPathMenu; + +public class SubwayService extends InputService { + private final SearchPathService searchPathService = new SearchPathService(); + + public void selectMainMenu(Scanner scanner, String menu) { + if (MAIN_SEARCH_PATH.isKeyEquals(menu)) { + searchPathManagement(scanner); + } + } + + private void searchPathManagement(Scanner scanner) { + try { + printSearchPathMenu(); + String menu = inputSelectMenu(scanner, SEARCH_PATH_MENU_RANGE); + if (!searchPathService.selectSearchPathMenu(scanner)) { + searchPathManagement(scanner); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + searchPathManagement(scanner); + } + } +} \ No newline at end of file From 1bff171ba5a4e53e9a3f922ff5c67ee18ec54887 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:12:39 +0900 Subject: [PATCH 21/34] =?UTF-8?q?feat:=20=EC=97=AD=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 역 이름 출력 메시지 추가 --- src/main/java/subway/domain/Station.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..1b21d0173 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -12,4 +12,8 @@ public String getName() { } // 추가 기능 구현 + @Override + public String toString() { + return "[INFO] " + name + "\n"; + } } From 4b4abc3bb1a1229bd2ce529149d6345062aa1050 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:19:01 +0900 Subject: [PATCH 22/34] =?UTF-8?q?feat:=20=EA=B2=BD=EB=A1=9C=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=EC=9D=84=20=EC=84=A0=ED=83=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최단 거리 선택 - 최소 시간 선택 - 돌아가기 선택 --- .../subway/service/SearchPathService.java | 31 ++++++++++++++++++- .../java/subway/service/SubwayService.java | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java index 43e9c043a..137945cb1 100644 --- a/src/main/java/subway/service/SearchPathService.java +++ b/src/main/java/subway/service/SearchPathService.java @@ -2,9 +2,38 @@ import java.util.Scanner; +import static subway.domain.MenuType.*; + public class SearchPathService { - public boolean selectSearchPathMenu(Scanner scanner) { + public boolean selectSearchPathMenu(Scanner scanner, String menu) { + if (SEARCH_SHORTEST_PATH.isKeyEquals(menu)) { + return searchShortestPath(scanner); + } + if (SEARCH_SHORTEST_TIME.isKeyEquals(menu)) { + return searchShortestTime(scanner); + } + if (BACK.isKeyEquals(menu)) { + return true; + } return false; } + + private boolean searchShortestPath(Scanner scanner) { + try { + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return false; + } + return true; + } + + private boolean searchShortestTime(Scanner scanner) { + try { + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return false; + } + return true; + } } \ No newline at end of file diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 810e43af5..402686dad 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -19,7 +19,7 @@ private void searchPathManagement(Scanner scanner) { try { printSearchPathMenu(); String menu = inputSelectMenu(scanner, SEARCH_PATH_MENU_RANGE); - if (!searchPathService.selectSearchPathMenu(scanner)) { + if (!searchPathService.selectSearchPathMenu(scanner, menu)) { searchPathManagement(scanner); } } catch (IllegalArgumentException e) { From d2f5e444cfe3f3d4e7ac7d7fbf8b8f5438894e1a Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:23:31 +0900 Subject: [PATCH 23/34] =?UTF-8?q?feat:=20=EC=B6=9C=EB=B0=9C=EC=97=AD?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=84=EC=B0=A9=EC=97=AD=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/SearchPathService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java index 137945cb1..ced1160da 100644 --- a/src/main/java/subway/service/SearchPathService.java +++ b/src/main/java/subway/service/SearchPathService.java @@ -4,7 +4,7 @@ import static subway.domain.MenuType.*; -public class SearchPathService { +public class SearchPathService extends InputService { public boolean selectSearchPathMenu(Scanner scanner, String menu) { if (SEARCH_SHORTEST_PATH.isKeyEquals(menu)) { @@ -21,6 +21,8 @@ public boolean selectSearchPathMenu(Scanner scanner, String menu) { private boolean searchShortestPath(Scanner scanner) { try { + String startStationName = inputStartStationName(scanner); + String endStationName = inputEndStationName(scanner); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); return false; @@ -30,6 +32,8 @@ private boolean searchShortestPath(Scanner scanner) { private boolean searchShortestTime(Scanner scanner) { try { + String startStationName = inputStartStationName(scanner); + String endStationName = inputEndStationName(scanner); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); return false; From 9715781489d75911f96c4a56b5c583c0d449d9e4 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:35:26 +0900 Subject: [PATCH 24/34] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 10ce04a69..282bc8bdc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,14 +11,15 @@ * **처리** + [초기화] + [x] 지하철(Station) 초기 정보를 저장한다. - + [ ] 노선(Line) 초기 정보를 저장한다. + + [x] 노선(Line) 초기 정보를 저장한다. + [ ] 노선에 연결된 역 초기 정보를 저장한다. + [메인 화면] - - [ ] 메인 화면의 메뉴를 선택한다. + - [x] 메인 화면의 메뉴를 선택한다. - [예외 처리] 선택 가능한 기능인지 검증한다. + [경로 조회] - + [ ] 경로 기준을 선택한다. + + [x] 경로 기준을 선택한다. - [예외 처리] 선택 가능한 기능인지 검증한다. + + [ ] 등록된 역을 검색한다. + [ ] 경로를 조회한다. - [예외 처리] 출발역이 존재하는지 검증한다. - [예외 처리] 도착역이 존재하는지 검증한다. From 0a3bedfe00b59e22bef4aa23d4a5bff3facd5feb Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 15:35:53 +0900 Subject: [PATCH 25/34] =?UTF-8?q?feat:=20=EB=93=B1=EB=A1=9D=EB=90=9C=20?= =?UTF-8?q?=EC=97=AD=EC=9D=84=20=EA=B2=80=EC=83=89=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/StationRepository.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index 8ed9d103f..accd940a5 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -23,4 +23,11 @@ public static boolean deleteStation(String name) { public static void deleteAll() { stations.clear(); } + + public static Station findStationByName(String stationName) { + return stations.stream() + .filter(station -> station.getName().equals(stationName)) + .findAny() + .orElseThrow(() -> new IllegalArgumentException("\n[ERROR] 해당 역은 존재하지 않습니다.")); + } } From 8738b520920922cedd21c1ef81b7249b04287dba Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:42:53 +0900 Subject: [PATCH 26/34] =?UTF-8?q?feat:=20=EC=B5=9C=EB=8B=A8=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=EB=A5=BC=20=EA=B3=84=EC=82=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/domain/LineStationRepository.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/subway/domain/LineStationRepository.java diff --git a/src/main/java/subway/domain/LineStationRepository.java b/src/main/java/subway/domain/LineStationRepository.java new file mode 100644 index 000000000..165d32941 --- /dev/null +++ b/src/main/java/subway/domain/LineStationRepository.java @@ -0,0 +1,27 @@ +package subway.domain; + +import org.jgrapht.GraphPath; +import org.jgrapht.alg.shortestpath.DijkstraShortestPath; +import org.jgrapht.graph.DefaultWeightedEdge; +import org.jgrapht.graph.WeightedMultigraph; + +import static subway.domain.SubwayPathFactory.creatPathFirstGraph; + +public class LineStationRepository { + private static WeightedMultigraph lineStation + = new WeightedMultigraph<>(DefaultWeightedEdge.class); + + public static void addLineStationOfSection(String startStation, String endStation, int weight) { + lineStation.setEdgeWeight(lineStation.addEdge(startStation, endStation), weight); + } + + public static void addVertex(String startStation) { + lineStation.addVertex(startStation); + } + + public static GraphPath findShortestPath(String start, String end) { + creatPathFirstGraph(); + DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(lineStation); + return dijkstraShortestPath.getPath(start, end); + } +} \ No newline at end of file From db3a9b2239f2f2b871774b63d50a8672c04eee2b Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:43:33 +0900 Subject: [PATCH 27/34] =?UTF-8?q?feat:=20=EC=B4=88=EA=B8=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/SubwayPathFactory.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/main/java/subway/domain/SubwayPathFactory.java b/src/main/java/subway/domain/SubwayPathFactory.java index 7d66f1f95..c4fc6f17b 100644 --- a/src/main/java/subway/domain/SubwayPathFactory.java +++ b/src/main/java/subway/domain/SubwayPathFactory.java @@ -1,10 +1,32 @@ package subway.domain; +import static subway.domain.LineStationRepository.*; +import static subway.domain.StationRepository.findStationByName; + public class SubwayPathFactory { + private static String[] startStations = {"교대역", "강남역", "강남역", "역삼역", "교대역", "남부터미널역", "남부터미널역", "양재역", + "양재역", "매봉역", "강남역", "양재역", "양재역", "양재시민의숲역"}; + private static String[] endStations = {"강남역", "교대역", "역삼역", "강남역", "남부터미널역", "교대역", "양재역", "남부터미널역", + "매봉역", "양재역", "양재역", "강남역", "양재시민의숲역", "양재역"}; + private static int[] distances = {2, 2, 2, 2, 3, 3, 6, 6, 1, 1, 1, 1, 10, 10}; + private static int[] times = {3, 3, 3, 3, 2, 2, 5, 5, 1, 1, 8, 8, 3, 3}; public static void init() { initStation(); initLine(); + initGraphVertex(); + } + + public static void creatPathFirstGraph() { + for (int i = 0; i < startStations.length; i++) { + addLineStationOfSection(startStations[i], endStations[i], distances[i]); + } + } + + public static void creatTimeFirstGraph() { + for (int i = 0; i < startStations.length; i++) { + addLineStationOfSection(startStations[i], endStations[i], times[i]); + } } private static void initStation() { @@ -22,4 +44,14 @@ private static void initLine() { LineRepository.addLine(new Line("3호선")); LineRepository.addLine(new Line("신분당선")); } + + private static void initGraphVertex() { + addVertex("교대역"); + addVertex("강남역"); + addVertex("역삼역"); + addVertex("남부터미널역"); + addVertex("양재역"); + addVertex("양재시민의숲역"); + addVertex("매봉역"); + } } \ No newline at end of file From a5c6c5f4433989919b5a122d7ff407bc2448bbb1 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:43:52 +0900 Subject: [PATCH 28/34] =?UTF-8?q?feat:=20=EC=B5=9C=EC=86=8C=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9D=84=20=EA=B3=84=EC=82=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/LineStationRepository.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/subway/domain/LineStationRepository.java b/src/main/java/subway/domain/LineStationRepository.java index 165d32941..c819c0e88 100644 --- a/src/main/java/subway/domain/LineStationRepository.java +++ b/src/main/java/subway/domain/LineStationRepository.java @@ -6,6 +6,7 @@ import org.jgrapht.graph.WeightedMultigraph; import static subway.domain.SubwayPathFactory.creatPathFirstGraph; +import static subway.domain.SubwayPathFactory.creatTimeFirstGraph; public class LineStationRepository { private static WeightedMultigraph lineStation @@ -24,4 +25,10 @@ public static GraphPath findShortestPath(String start, String end) { DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(lineStation); return dijkstraShortestPath.getPath(start, end); } + + public static GraphPath findShortestTime(String start, String end) { + creatTimeFirstGraph(); + DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(lineStation); + return dijkstraShortestPath.getPath(start, end); + } } \ No newline at end of file From 3b353dad2113d3eb6173f167910468e248ea5365 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:49:20 +0900 Subject: [PATCH 29/34] =?UTF-8?q?feat:=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/SubwayController.java | 2 +- src/main/java/subway/domain/Section.java | 14 ++++++++++-- .../subway/service/SearchPathService.java | 22 +++++++++++++++++++ .../java/subway/service/SubwayService.java | 2 +- .../subway/{service => view}/OutputView.java | 12 +++++++++- 5 files changed, 47 insertions(+), 5 deletions(-) rename src/main/java/subway/{service => view}/OutputView.java (55%) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index f65e5e46a..26c0e91c4 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -2,7 +2,7 @@ import subway.domain.MenuType; import subway.service.InputService; -import subway.service.OutputView; +import subway.view.OutputView; import subway.service.SubwayService; import java.util.Scanner; diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java index 3b16651e6..c00f1db06 100644 --- a/src/main/java/subway/domain/Section.java +++ b/src/main/java/subway/domain/Section.java @@ -1,10 +1,16 @@ package subway.domain; -public class Section { +import org.jgrapht.graph.DefaultWeightedEdge; + +public class Section extends DefaultWeightedEdge { + private Station startStation; + private Station endStation; private int time; private int distance; - public Section(int time, int distance) { + public Section(Station startStation, Station endStation, int time, int distance) { + this.startStation = startStation; + this.endStation = endStation; this.time = time; this.distance = distance; } @@ -16,4 +22,8 @@ public int getTime() { public int getDistance() { return distance; } + + public static Section of(Station start, Station end, int time, int distance) { + return new Section(start, end, time, distance); + } } \ No newline at end of file diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java index ced1160da..05085eedc 100644 --- a/src/main/java/subway/service/SearchPathService.java +++ b/src/main/java/subway/service/SearchPathService.java @@ -1,8 +1,14 @@ package subway.service; +import org.jgrapht.GraphPath; +import subway.domain.LineStationRepository; +import subway.view.OutputView; + import java.util.Scanner; import static subway.domain.MenuType.*; +import static subway.domain.StationRepository.findStationByName; +import static subway.view.OutputView.printResult; public class SearchPathService extends InputService { @@ -23,6 +29,7 @@ private boolean searchShortestPath(Scanner scanner) { try { String startStationName = inputStartStationName(scanner); String endStationName = inputEndStationName(scanner); + calculationShortestPath(startStationName, endStationName); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); return false; @@ -34,10 +41,25 @@ private boolean searchShortestTime(Scanner scanner) { try { String startStationName = inputStartStationName(scanner); String endStationName = inputEndStationName(scanner); + calculationShortestTime(startStationName, endStationName); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); return false; } return true; } + + private void calculationShortestPath(String startStationName, String endStationName) { + findStationByName(startStationName); + findStationByName(endStationName); + GraphPath shortestPath = LineStationRepository.findShortestPath(startStationName, endStationName); + printResult(shortestPath); + } + + private void calculationShortestTime(String startStationName, String endStationName) { + findStationByName(startStationName); + findStationByName(endStationName); + GraphPath shortestPath = LineStationRepository.findShortestTime(startStationName, endStationName); + printResult(shortestPath); + } } \ No newline at end of file diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 402686dad..12a15c901 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -4,7 +4,7 @@ import static subway.domain.MenuType.MAIN_SEARCH_PATH; import static subway.domain.MenuType.SEARCH_PATH_MENU_RANGE; -import static subway.service.OutputView.printSearchPathMenu; +import static subway.view.OutputView.printSearchPathMenu; public class SubwayService extends InputService { private final SearchPathService searchPathService = new SearchPathService(); diff --git a/src/main/java/subway/service/OutputView.java b/src/main/java/subway/view/OutputView.java similarity index 55% rename from src/main/java/subway/service/OutputView.java rename to src/main/java/subway/view/OutputView.java index 6a71d185b..a738a81e3 100644 --- a/src/main/java/subway/service/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -1,4 +1,6 @@ -package subway.service; +package subway.view; + +import org.jgrapht.GraphPath; public class OutputView { private static final char NEW_LINE = '\n'; @@ -15,4 +17,12 @@ public static void printSearchPathMenu() { System.out.println("2. 최소 시간"); System.out.println("B. 돌아가기"); } + + public static void printResult(GraphPath graphPath) { + System.out.println("\n## 조회 결과"); + System.out.println("[INFO] 총 거리: " + graphPath.getWeight()); + System.out.println("[INFO] 총 소요 시간: " + graphPath.getWeight()); + System.out.println("[INFO] ---"); + System.out.println(graphPath.getEdgeList()); + } } \ No newline at end of file From 8196e835e208cf55a46c49ad81f4c90dd7e12b2b Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:51:51 +0900 Subject: [PATCH 30/34] =?UTF-8?q?feat:=20=EA=B2=BD=EB=A1=9C=EA=B0=80=20?= =?UTF-8?q?=EB=8F=99=EC=9D=BC=ED=95=A0=EB=95=8C=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/SearchPathService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java index 05085eedc..c175530e1 100644 --- a/src/main/java/subway/service/SearchPathService.java +++ b/src/main/java/subway/service/SearchPathService.java @@ -50,6 +50,9 @@ private boolean searchShortestTime(Scanner scanner) { } private void calculationShortestPath(String startStationName, String endStationName) { + if (startStationName.equals(endStationName)) { + throw new IllegalArgumentException("[ERROR] 출발역과 도착역이 동일합니다."); + } findStationByName(startStationName); findStationByName(endStationName); GraphPath shortestPath = LineStationRepository.findShortestPath(startStationName, endStationName); @@ -57,6 +60,9 @@ private void calculationShortestPath(String startStationName, String endStationN } private void calculationShortestTime(String startStationName, String endStationName) { + if (startStationName.equals(endStationName)) { + throw new IllegalArgumentException("[ERROR] 출발역과 도착역이 동일합니다."); + } findStationByName(startStationName); findStationByName(endStationName); GraphPath shortestPath = LineStationRepository.findShortestTime(startStationName, endStationName); From 76a66caa2a84721129ac3d78a4aa6bc93d3af40a Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:54:48 +0900 Subject: [PATCH 31/34] =?UTF-8?q?feat:=20=EC=97=AD=20=EC=A1=B4=EC=9E=AC=20?= =?UTF-8?q?=EC=9C=A0=EB=AC=B4=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/StationRepository.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index accd940a5..b5fc386ca 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -24,10 +24,13 @@ public static void deleteAll() { stations.clear(); } - public static Station findStationByName(String stationName) { - return stations.stream() - .filter(station -> station.getName().equals(stationName)) + public static void findStationByName(String stationName) { + Station station = stations.stream() + .filter(s -> s.getName().equals(stationName)) .findAny() - .orElseThrow(() -> new IllegalArgumentException("\n[ERROR] 해당 역은 존재하지 않습니다.")); + .orElse(null); + if (station.equals(null)) { + throw new IllegalArgumentException("\n[ERROR] 해당 역은 존재하지 않습니다."); + } } } From 64581091de6ecc5100a8cb5047db288c3a55f4c4 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:55:18 +0900 Subject: [PATCH 32/34] =?UTF-8?q?feat:=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/controller/SubwayController.java | 2 +- src/main/java/subway/domain/LineStationRepository.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 26c0e91c4..65a864cff 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -11,7 +11,7 @@ public class SubwayController extends InputService { private final SubwayService subwayService = new SubwayService(); - + public void start(Scanner scanner) { String menu = ""; try { diff --git a/src/main/java/subway/domain/LineStationRepository.java b/src/main/java/subway/domain/LineStationRepository.java index c819c0e88..e3fa6dc81 100644 --- a/src/main/java/subway/domain/LineStationRepository.java +++ b/src/main/java/subway/domain/LineStationRepository.java @@ -21,12 +21,14 @@ public static void addVertex(String startStation) { } public static GraphPath findShortestPath(String start, String end) { + SubwayPathFactory.init(); creatPathFirstGraph(); DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(lineStation); return dijkstraShortestPath.getPath(start, end); } public static GraphPath findShortestTime(String start, String end) { + SubwayPathFactory.init(); creatTimeFirstGraph(); DijkstraShortestPath dijkstraShortestPath = new DijkstraShortestPath(lineStation); return dijkstraShortestPath.getPath(start, end); From ff2d5a175586e23ef76abac6b2327d8195343a6d Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:56:36 +0900 Subject: [PATCH 33/34] =?UTF-8?q?feat:=20=EC=86=8C=EC=9A=94=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9D=84=20=EC=B6=9C=EB=A0=A5=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/service/SearchPathService.java | 8 +++++--- src/main/java/subway/view/OutputView.java | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/service/SearchPathService.java b/src/main/java/subway/service/SearchPathService.java index c175530e1..83007a521 100644 --- a/src/main/java/subway/service/SearchPathService.java +++ b/src/main/java/subway/service/SearchPathService.java @@ -56,7 +56,8 @@ private void calculationShortestPath(String startStationName, String endStationN findStationByName(startStationName); findStationByName(endStationName); GraphPath shortestPath = LineStationRepository.findShortestPath(startStationName, endStationName); - printResult(shortestPath); + GraphPath shortestTime = LineStationRepository.findShortestTime(startStationName, endStationName); + printResult(shortestPath, shortestTime); } private void calculationShortestTime(String startStationName, String endStationName) { @@ -65,7 +66,8 @@ private void calculationShortestTime(String startStationName, String endStationN } findStationByName(startStationName); findStationByName(endStationName); - GraphPath shortestPath = LineStationRepository.findShortestTime(startStationName, endStationName); - printResult(shortestPath); + GraphPath shortestPath = LineStationRepository.findShortestPath(startStationName, endStationName); + GraphPath shortestTime = LineStationRepository.findShortestTime(startStationName, endStationName); + printResult(shortestPath, shortestTime); } } \ No newline at end of file diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index a738a81e3..2f36706c6 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -18,10 +18,10 @@ public static void printSearchPathMenu() { System.out.println("B. 돌아가기"); } - public static void printResult(GraphPath graphPath) { + public static void printResult(GraphPath graphPath, GraphPath graphTime) { System.out.println("\n## 조회 결과"); System.out.println("[INFO] 총 거리: " + graphPath.getWeight()); - System.out.println("[INFO] 총 소요 시간: " + graphPath.getWeight()); + System.out.println("[INFO] 총 소요 시간: " + graphTime.getWeight()); System.out.println("[INFO] ---"); System.out.println(graphPath.getEdgeList()); } From b96773235e7fbf9baf4f1432f85f3b37f0cfcbe1 Mon Sep 17 00:00:00 2001 From: doorisopen Date: Sat, 19 Dec 2020 17:57:20 +0900 Subject: [PATCH 34/34] =?UTF-8?q?docs:=20=EA=B5=AC=ED=98=84=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20=EB=AA=A9=EB=A1=9D=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 282bc8bdc..7b845f736 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,19 +19,19 @@ + [경로 조회] + [x] 경로 기준을 선택한다. - [예외 처리] 선택 가능한 기능인지 검증한다. - + [ ] 등록된 역을 검색한다. + + [x] 등록된 역을 검색한다. + [ ] 경로를 조회한다. - [예외 처리] 출발역이 존재하는지 검증한다. - [예외 처리] 도착역이 존재하는지 검증한다. - [예외 처리] 출발역과 도착역이 같은지 검증한다. - [예외 처리] 출발역과 도착역이 연결되어있는지 검증한다. - + [ ] 경로의 총 거리를 계산한다. - + [ ] 경로의 총 소요 시간을 계산한다. + + [x] 경로의 총 거리를 계산한다. + + [x] 경로의 총 소요 시간을 계산한다. * **출력** + [메인 화면] - [x] 메인 화면을 출력한다. + [경로 조회] - [x] 경로 조회 화면을 출력한다. - - [ ] 총 거리를 출력한다 - - [ ] 총 소요 시간을 출력한다. - - [ ] 출발역 부터 도착역까지 역을 출력한다. \ No newline at end of file + - [x] 총 거리를 출력한다 + - [x] 총 소요 시간을 출력한다. + - [x] 출발역 부터 도착역까지 역을 출력한다. \ No newline at end of file