From 35b7f08723ef4f7c396b7265f59885a6c8f301f0 Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sat, 8 Aug 2026 10:20:38 +0900 Subject: [PATCH 1/8] =?UTF-8?q?docs=20:=20readme=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29bb2d..84a8aa24b40 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,11 @@ +# 1. 차 이름 입력문구 출력 + +# 2. 배열 동적 할당으로 차 입력 받음 + +# 3. 시도할 횟수 입력받기 + +# 4. 실행결과 순차적 출력 + +# 5. 최종 우승자 출력 + +# 6. 예외처리 \ No newline at end of file From 449cf20fad5bcc1c8eef2e45f3ab0d527f289529 Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sat, 8 Aug 2026 10:27:00 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat=20:=20=EC=8B=9C=EC=9E=91=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=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/racingcar/Application.java | 1 + src/main/java/racingcar/controller/Controller.java | 4 ++++ src/main/java/racingcar/model/Model.java | 4 ++++ src/main/java/racingcar/view/View.java | 7 +++++++ 4 files changed, 16 insertions(+) create mode 100644 src/main/java/racingcar/controller/Controller.java create mode 100644 src/main/java/racingcar/model/Model.java create mode 100644 src/main/java/racingcar/view/View.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7242..43a4b272355 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -3,5 +3,6 @@ public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + } } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java new file mode 100644 index 00000000000..adba798bafa --- /dev/null +++ b/src/main/java/racingcar/controller/Controller.java @@ -0,0 +1,4 @@ +package racingcar.controller; + +public class Controller { +} diff --git a/src/main/java/racingcar/model/Model.java b/src/main/java/racingcar/model/Model.java new file mode 100644 index 00000000000..ed9e7bee907 --- /dev/null +++ b/src/main/java/racingcar/model/Model.java @@ -0,0 +1,4 @@ +package racingcar.model; + +public class Model { +} diff --git a/src/main/java/racingcar/view/View.java b/src/main/java/racingcar/view/View.java new file mode 100644 index 00000000000..51ad1382ef3 --- /dev/null +++ b/src/main/java/racingcar/view/View.java @@ -0,0 +1,7 @@ +package racingcar.view; + +public class View { + public void printStartMessage(){ + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + } +} From b7c4bcd2ad4381c37db98c435d98133c3e59eb4a Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sat, 8 Aug 2026 10:38:38 +0900 Subject: [PATCH 3/8] =?UTF-8?q?fix=20:=20=EC=8B=9C=EC=9E=91=20=EB=AC=B8?= =?UTF-8?q?=EA=B5=AC=EB=A5=BC=20=EB=94=B0=EB=A1=9C=20=EC=B6=9C=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EA=B3=A0=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=84=EB=96=84=20=EC=B6=9C=EB=A0=A5=20=ED=95=98?= =?UTF-8?q?=EB=8A=94=EA=B1=B8=EB=A1=9C=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/racingcar/view/View.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/view/View.java b/src/main/java/racingcar/view/View.java index 51ad1382ef3..701c15d295c 100644 --- a/src/main/java/racingcar/view/View.java +++ b/src/main/java/racingcar/view/View.java @@ -1,7 +1,17 @@ package racingcar.view; +import camp.nextstep.edu.missionutils.Console; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + public class View { - public void printStartMessage(){ + + Scanner input = new Scanner(System.in); + + public List readCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + return new ArrayList<>(List.of(Console.readLine().split(","))); } } From 090071dbb2bc4dbca752a7d7716001d8f4a7006d Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sat, 8 Aug 2026 11:06:06 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat=20:=20=EC=8B=9C=EB=8F=84=20=ED=9A=9F?= =?UTF-8?q?=EC=88=98=20=EC=9E=85=EB=A0=A5=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/Controller.java | 12 ++++++++++++ .../racingcar/model/{Model.java => RacingModel.java} | 3 ++- .../racingcar/view/{View.java => InputView.java} | 7 ++++++- 3 files changed, 20 insertions(+), 2 deletions(-) rename src/main/java/racingcar/model/{Model.java => RacingModel.java} (50%) rename src/main/java/racingcar/view/{View.java => InputView.java} (73%) diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index adba798bafa..ad925eafb8a 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -1,4 +1,16 @@ package racingcar.controller; +import racingcar.view.InputView; + +import java.util.List; + public class Controller { + + InputView inputView = new InputView(); + List carNames = inputView.readCarName(); + int tryNumber = inputView.tryNumber(); + + public void run(){ + + } } diff --git a/src/main/java/racingcar/model/Model.java b/src/main/java/racingcar/model/RacingModel.java similarity index 50% rename from src/main/java/racingcar/model/Model.java rename to src/main/java/racingcar/model/RacingModel.java index ed9e7bee907..b0355923bb6 100644 --- a/src/main/java/racingcar/model/Model.java +++ b/src/main/java/racingcar/model/RacingModel.java @@ -1,4 +1,5 @@ package racingcar.model; -public class Model { +public class RacingModel { + } diff --git a/src/main/java/racingcar/view/View.java b/src/main/java/racingcar/view/InputView.java similarity index 73% rename from src/main/java/racingcar/view/View.java rename to src/main/java/racingcar/view/InputView.java index 701c15d295c..e6dd077ece8 100644 --- a/src/main/java/racingcar/view/View.java +++ b/src/main/java/racingcar/view/InputView.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Scanner; -public class View { +public class InputView { Scanner input = new Scanner(System.in); @@ -14,4 +14,9 @@ public List readCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); return new ArrayList<>(List.of(Console.readLine().split(","))); } + + public int tryNumber(){ + System.out.println("시도할 회수는 몇회인가요?"); + return input.nextInt(); + } } From 3ec4ef30709d12002ddb344ca049f50159b4bbe2 Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:06:45 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat=20:=20=EC=B5=9C=EC=A2=85=20=EC=9A=B0?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=20=EC=B6=9C=EB=A0=A5=20=EB=B0=8F=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 7 +++-- .../java/racingcar/controller/Controller.java | 13 +++++++++ src/main/java/racingcar/model/RacingGame.java | 28 +++++++++++++++++++ .../java/racingcar/model/RacingModel.java | 5 ---- src/main/java/racingcar/view/InputView.java | 16 +++++++---- 5 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 src/main/java/racingcar/model/RacingGame.java delete mode 100644 src/main/java/racingcar/model/RacingModel.java diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 43a4b272355..fda70ab897c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,8 +1,11 @@ package racingcar; +import racingcar.controller.Controller; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 - + Controller controller = new Controller(); + controller.run(); + } } diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index ad925eafb8a..cf27ea940da 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -1,16 +1,29 @@ package racingcar.controller; +import racingcar.model.RacingGame; import racingcar.view.InputView; +import racingcar.view.OutputView; import java.util.List; public class Controller { InputView inputView = new InputView(); + OutputView outputView = new OutputView(); List carNames = inputView.readCarName(); int tryNumber = inputView.tryNumber(); public void run(){ + RacingGame game = new RacingGame(carNames); + + outputView.showResultMessage(); + + for(int i = 0; i cars; + + public RacingGame(List names) { + this.cars = names.stream() + .map(Car::new) + .toList(); + } + + public void moveAll(){ + for (Car car : cars) { + int number = Randoms.pickNumberInRange(0, 9); + car.move(number); + } + } + + public List getCars(){ + return cars; + } + +} diff --git a/src/main/java/racingcar/model/RacingModel.java b/src/main/java/racingcar/model/RacingModel.java deleted file mode 100644 index b0355923bb6..00000000000 --- a/src/main/java/racingcar/model/RacingModel.java +++ /dev/null @@ -1,5 +0,0 @@ -package racingcar.model; - -public class RacingModel { - -} diff --git a/src/main/java/racingcar/view/InputView.java b/src/main/java/racingcar/view/InputView.java index e6dd077ece8..7bf3a6cd8c8 100644 --- a/src/main/java/racingcar/view/InputView.java +++ b/src/main/java/racingcar/view/InputView.java @@ -4,19 +4,23 @@ import java.util.ArrayList; import java.util.List; -import java.util.Scanner; public class InputView { - Scanner input = new Scanner(System.in); - public List readCarName(){ System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); return new ArrayList<>(List.of(Console.readLine().split(","))); } - public int tryNumber(){ - System.out.println("시도할 회수는 몇회인가요?"); - return input.nextInt(); + public int tryNumber() { + System.out.println("시도할 횟수는 몇 회인가요?"); + + int tryNumber = Integer.parseInt(Console.readLine()); + + if (tryNumber <= 0) { + throw new IllegalArgumentException(); + } + + return tryNumber; } } From 935f62472557920fdeeb660e572366bc4b89c48b Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Sun, 9 Aug 2026 15:15:15 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat=20:=20=EC=B5=9C=EC=A2=85=20=EC=9A=B0?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=20=EC=B6=9C=EB=A0=A5=20=EB=B0=8F=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/RacingGame.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/model/RacingGame.java b/src/main/java/racingcar/model/RacingGame.java index e00cd7b17e8..a3d87b18dd0 100644 --- a/src/main/java/racingcar/model/RacingGame.java +++ b/src/main/java/racingcar/model/RacingGame.java @@ -5,9 +5,9 @@ import java.util.List; public class RacingGame { - private final List cars; - + private final static int MIN_VALUE = 0; + private final static int MAX_VALUE = 9; public RacingGame(List names) { this.cars = names.stream() .map(Car::new) @@ -16,7 +16,7 @@ public RacingGame(List names) { public void moveAll(){ for (Car car : cars) { - int number = Randoms.pickNumberInRange(0, 9); + int number = Randoms.pickNumberInRange(MIN_VALUE, MAX_VALUE); car.move(number); } } From 5569570b62314a7f9f635d0a59c35a6310df052c Mon Sep 17 00:00:00 2001 From: Leesjsj <165141498+leesj1021@users.noreply.github.com> Date: Mon, 10 Aug 2026 13:39:46 +0900 Subject: [PATCH 7/8] =?UTF-8?q?fix=20:=20=EC=B6=9C=EB=A0=A5=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EB=8B=A4=EB=93=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/controller/Controller.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/racingcar/controller/Controller.java b/src/main/java/racingcar/controller/Controller.java index cf27ea940da..8905fa90ca7 100644 --- a/src/main/java/racingcar/controller/Controller.java +++ b/src/main/java/racingcar/controller/Controller.java @@ -21,6 +21,7 @@ public void run(){ for(int i = 0; i Date: Fri, 28 Aug 2026 15:08:58 +0900 Subject: [PATCH 8/8] =?UTF-8?q?car=20model=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/model/Car.java | 38 ++++++++++++++++++++ src/main/java/racingcar/view/OutputView.java | 33 +++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/java/racingcar/model/Car.java create mode 100644 src/main/java/racingcar/view/OutputView.java diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java new file mode 100644 index 00000000000..db16a5f91ae --- /dev/null +++ b/src/main/java/racingcar/model/Car.java @@ -0,0 +1,38 @@ +package racingcar.model; + +public class Car { + private static final int MAX_NAME_LENGTH = 5; + private static final int CRITERIA_NUM = 4; + + private final String name; + private int position = 0; + + public Car(String name){ + validateName(name); + this.name = name; + } + + private void validateName(String name) { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException(); + } + + if (name.length() > MAX_NAME_LENGTH) { + throw new IllegalArgumentException(); + } + } + + public void move(int number){ + if(number >=CRITERIA_NUM){ + position ++; + } + } + + public String getName(){ + return name; + } + + public int getPosition(){ + return position; + } +} diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java new file mode 100644 index 00000000000..ca009082458 --- /dev/null +++ b/src/main/java/racingcar/view/OutputView.java @@ -0,0 +1,33 @@ +package racingcar.view; + +import racingcar.model.Car; + +import java.util.List; +import java.util.stream.Collectors; + +public class OutputView { + public void showResultMessage() { + System.out.println("실행 결과"); + } + public void printAll(List cars){ + for(Car car : cars){ + String position = "-".repeat(car.getPosition()); + System.out.println(car.getName() + " : " + position); + } + + } + public void showWinner(List cars){ + int maxPosition = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElseThrow(); + + String winners = cars.stream() + .filter(car -> car.getPosition() == maxPosition) + .map(Car::getName) + .collect(Collectors.joining(", ")); + + System.out.println("최종 우승자 : " + winners); + } + +}