From 5f3dd9fd327069284b194c202404de9a3bb94286 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 22:05:51 +0900 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20=EA=B2=BD=EC=A3=BC=ED=95=A0=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=98=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5(5=EC=9E=90=20=EC=9D=B4=EB=82=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 19 ++++++++++ src/main/java/racingcar/Application.java | 6 ++-- src/main/java/racingcar/Car.java | 10 ++++++ src/main/java/racingcar/Input.java | 21 +++++++++++ src/main/java/racingcar/Output.java | 15 ++++++++ src/main/java/racingcar/RacingGame.java | 37 ++++++++++++++++++++ src/main/java/racingcar/Validator.java | 19 ++++++++++ src/test/java/racingcar/ApplicationTest.java | 18 ++++------ 8 files changed, 130 insertions(+), 15 deletions(-) create mode 100644 src/main/java/racingcar/Car.java create mode 100644 src/main/java/racingcar/Input.java create mode 100644 src/main/java/racingcar/Output.java create mode 100644 src/main/java/racingcar/RacingGame.java create mode 100644 src/main/java/racingcar/Validator.java diff --git a/docs/README.md b/docs/README.md index e69de29b..59b3a628 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,19 @@ +입력 + 경주할 자동차의 이름 입력(5자 이내) + 시도할 횟수 입력 +출력 + 각 차수별 실행 결과 출력 + 최종 우승자 출력 +자동차 + 자동차 객체 생성 + 0에서 9 사이에서 무작위 값 구하기 + 숫자가 4이상이면 자동차 전진 + 자동차가 전진한 횟수만큼 -로 표시 +경주 게임 + 입력받은 만큼 경주 반복 + 가장 많이 전진한 자동차를 우승자로 선정 + 우승자가 여러명일 경우 쉼표로 구분 +오류 + 자동차 이름 5자 이내 + 시도 횟수 0 이상 + 시도 횟수는 숫자 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..6491ee0f 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,7 @@ package racingcar; - public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + RacingGame racingGame = new RacingGame(); + racingGame.start(); } -} +} \ No newline at end of file diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 00000000..31f55976 --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,10 @@ +package racingcar; +public class Car { + private final String name; + private int position=0; + public Car(String name){this.name = name;} + public void move(int number){if(number>=4){position++;}} + public String getName(){return name;} + public int getPosition(){return position;} + public String getPositionSign(){return "-".repeat(position);} +} \ No newline at end of file diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java new file mode 100644 index 00000000..79f1558b --- /dev/null +++ b/src/main/java/racingcar/Input.java @@ -0,0 +1,21 @@ +package racingcar; +import camp.nextstep.edu.missionutils.Console; +import java.util.*; +public class Input{ + public static List readCarNames() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String input = Console.readLine(); + String[] names = input.split(","); + List cars = new ArrayList<>(); + for (String name : names) { + Validator.validateCarName(name.trim()); + cars.add(new Car(name.trim())); + } + return cars; + } + public static int readTryCount() { + System.out.println("시도할 회수는 몇회인가요?"); + String input = Console.readLine(); + return Validator.validateTryCount(input); + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java new file mode 100644 index 00000000..1e79b11c --- /dev/null +++ b/src/main/java/racingcar/Output.java @@ -0,0 +1,15 @@ +package racingcar; +import java.util.*; +public class Output { + public static void printRoundResult(List cars) { + for (Car car : cars) { + System.out.println(car.getName() + " : " + car.getPositionSign()); + } + System.out.println(); + } + public static void printWinners(List winners) { + String result = String.join(", ", + winners.stream().map(Car::getName).toList()); + System.out.println("최종 우승자 : " + result); + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java new file mode 100644 index 00000000..5ee93382 --- /dev/null +++ b/src/main/java/racingcar/RacingGame.java @@ -0,0 +1,37 @@ +package racingcar; +import camp.nextstep.edu.missionutils.Randoms; +import java.util.*; +public class RacingGame { + private List cars; + private int tryCount; + public void start() { + cars = Input.readCarNames(); + tryCount = Input.readTryCount(); + System.out.println("\n실행 결과"); + for (int i = 0; i < tryCount; i++) { + raceOnce(); + Output.printRoundResult(cars); + } + List winners = getWinners(); + Output.printWinners(winners); + } + private void raceOnce() { + for (Car car : cars) { + int number = Randoms.pickNumberInRange(0, 9); + car.move(number); + } + } + private List getWinners() { + int maxPosition = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElse(0); + List winners = new ArrayList<>(); + for (Car car : cars) { + if (car.getPosition() == maxPosition) { + winners.add(car); + } + } + return winners; + } +} \ No newline at end of file diff --git a/src/main/java/racingcar/Validator.java b/src/main/java/racingcar/Validator.java new file mode 100644 index 00000000..911dbb91 --- /dev/null +++ b/src/main/java/racingcar/Validator.java @@ -0,0 +1,19 @@ +package racingcar; +public class Validator { + public static void validateCarName(String name) { + if (name == null || name.trim().isEmpty() || name.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 1~5자 이내여야 합니다."); + } + } + public static int validateTryCount(String input) { + try { + int count = Integer.parseInt(input); + if (count < 0) { + throw new IllegalArgumentException("시도 횟수는 0 이상이어야 합니다."); + } + return count; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수는 숫자여야 합니다."); + } + } +} \ No newline at end of file diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 764ba4c6..ce82c3c6 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -1,38 +1,32 @@ package racingcar; - import camp.nextstep.edu.missionutils.test.NsTest; import org.junit.jupiter.api.Test; - import static camp.nextstep.edu.missionutils.test.Assertions.assertRandomNumberInRangeTest; import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; - class ApplicationTest extends NsTest { - private static final int MOVING_FORWARD = 4; - private static final int STOP = 3; - + private static final int MOVING_FORWARD=4; + private static final int STOP=3; @Test void 전진_정지() { assertRandomNumberInRangeTest( () -> { - run("pobi,woni", "1"); - assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); + run("pobi,woni","1"); + assertThat(output()).contains("pobi : -","woni : ","최종 우승자 : pobi"); }, MOVING_FORWARD, STOP ); } - @Test void 이름에_대한_예외_처리() { assertSimpleTest(() -> - assertThatThrownBy(() -> runException("pobi,javaji", "1")) + assertThatThrownBy(() -> runException("pobi,javaji","1")) .isInstanceOf(IllegalArgumentException.class) ); } - @Override public void runMain() { Application.main(new String[]{}); } -} +} \ No newline at end of file From e2c86f3ced1cd999fc3499d24bcaf92d61224662 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:29:35 +0900 Subject: [PATCH 02/14] =?UTF-8?q?fear:=20=EA=B2=BD=EC=A3=BC=ED=95=A0=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=98=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5(5=EC=9E=90=20=EC=9D=B4=EB=82=B4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 10 ------- src/main/java/racingcar/Input.java | 5 ---- src/main/java/racingcar/Output.java | 15 ---------- src/main/java/racingcar/RacingGame.java | 37 ------------------------- src/main/java/racingcar/Validator.java | 19 ------------- 5 files changed, 86 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 31f55976..e69de29b 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,10 +0,0 @@ -package racingcar; -public class Car { - private final String name; - private int position=0; - public Car(String name){this.name = name;} - public void move(int number){if(number>=4){position++;}} - public String getName(){return name;} - public int getPosition(){return position;} - public String getPositionSign(){return "-".repeat(position);} -} \ No newline at end of file diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index 79f1558b..be6f7941 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -13,9 +13,4 @@ public static List readCarNames() { } return cars; } - public static int readTryCount() { - System.out.println("시도할 회수는 몇회인가요?"); - String input = Console.readLine(); - return Validator.validateTryCount(input); - } } \ No newline at end of file diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index 1e79b11c..e69de29b 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -1,15 +0,0 @@ -package racingcar; -import java.util.*; -public class Output { - public static void printRoundResult(List cars) { - for (Car car : cars) { - System.out.println(car.getName() + " : " + car.getPositionSign()); - } - System.out.println(); - } - public static void printWinners(List winners) { - String result = String.join(", ", - winners.stream().map(Car::getName).toList()); - System.out.println("최종 우승자 : " + result); - } -} \ No newline at end of file diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 5ee93382..e69de29b 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -1,37 +0,0 @@ -package racingcar; -import camp.nextstep.edu.missionutils.Randoms; -import java.util.*; -public class RacingGame { - private List cars; - private int tryCount; - public void start() { - cars = Input.readCarNames(); - tryCount = Input.readTryCount(); - System.out.println("\n실행 결과"); - for (int i = 0; i < tryCount; i++) { - raceOnce(); - Output.printRoundResult(cars); - } - List winners = getWinners(); - Output.printWinners(winners); - } - private void raceOnce() { - for (Car car : cars) { - int number = Randoms.pickNumberInRange(0, 9); - car.move(number); - } - } - private List getWinners() { - int maxPosition = cars.stream() - .mapToInt(Car::getPosition) - .max() - .orElse(0); - List winners = new ArrayList<>(); - for (Car car : cars) { - if (car.getPosition() == maxPosition) { - winners.add(car); - } - } - return winners; - } -} \ No newline at end of file diff --git a/src/main/java/racingcar/Validator.java b/src/main/java/racingcar/Validator.java index 911dbb91..e69de29b 100644 --- a/src/main/java/racingcar/Validator.java +++ b/src/main/java/racingcar/Validator.java @@ -1,19 +0,0 @@ -package racingcar; -public class Validator { - public static void validateCarName(String name) { - if (name == null || name.trim().isEmpty() || name.length() > 5) { - throw new IllegalArgumentException("자동차 이름은 1~5자 이내여야 합니다."); - } - } - public static int validateTryCount(String input) { - try { - int count = Integer.parseInt(input); - if (count < 0) { - throw new IllegalArgumentException("시도 횟수는 0 이상이어야 합니다."); - } - return count; - } catch (NumberFormatException e) { - throw new IllegalArgumentException("시도 횟수는 숫자여야 합니다."); - } - } -} \ No newline at end of file From 94ef1d952cfd6648178207f1971bd42a826b7d68 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:30:40 +0900 Subject: [PATCH 03/14] =?UTF-8?q?fear:=20=EC=8B=9C=EB=8F=84=ED=95=A0=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98=20=EC=9E=85=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Input.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/racingcar/Input.java b/src/main/java/racingcar/Input.java index be6f7941..77345247 100644 --- a/src/main/java/racingcar/Input.java +++ b/src/main/java/racingcar/Input.java @@ -13,4 +13,10 @@ public static List readCarNames() { } return cars; } + public static int readTryCount() { + System.out.println("시도할 회수는 몇회인가요?"); + String input = Console.readLine(); + return Validator.validateTryCount(input); + } + } \ No newline at end of file From 17cc2b7c8e80b2d6437aa72f68db6484aee0cbe6 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:31:38 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=EA=B0=81=20=EC=B0=A8=EC=88=98?= =?UTF-8?q?=EB=B3=84=20=EC=8B=A4=ED=96=89=20=EA=B2=B0=EA=B3=BC=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/racingcar/Output.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index e69de29b..d01a5d27 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -0,0 +1,9 @@ +package racingcar; +public class Output { + public static void printRoundResult(List cars) { + for (Car car : cars) { + System.out.println(car.getName() + " : " + car.getPositionSign()); + } + System.out.println(); + } +} \ No newline at end of file From d84ddbfbb8468cab9312252fae5f0b6943318b1c Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:32:13 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat:=20=EC=B5=9C=EB=8F=99=20=EC=9A=B0?= =?UTF-8?q?=EC=8A=B9=EC=9E=90=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/Output.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/racingcar/Output.java b/src/main/java/racingcar/Output.java index d01a5d27..1e79b11c 100644 --- a/src/main/java/racingcar/Output.java +++ b/src/main/java/racingcar/Output.java @@ -1,4 +1,5 @@ package racingcar; +import java.util.*; public class Output { public static void printRoundResult(List cars) { for (Car car : cars) { @@ -6,4 +7,9 @@ public static void printRoundResult(List cars) { } System.out.println(); } + public static void printWinners(List winners) { + String result = String.join(", ", + winners.stream().map(Car::getName).toList()); + System.out.println("최종 우승자 : " + result); + } } \ No newline at end of file From 043be210300688279aa0ff0829ef2a433a2905a5 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:33:29 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index e69de29b..7a800fa9 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,6 @@ +package racingcar; +public class Car { + private final String name; + private int position=0; + public Car(String name){this.name = name;} +} \ No newline at end of file From 8a5a890732f8948fe8ba5f696b19386a9784e69b Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:36:29 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat:=200=EC=97=90=EC=84=9C=209=20?= =?UTF-8?q?=EC=82=AC=EC=9D=B4=EC=97=90=EC=84=9C=20=EB=AC=B4=EC=9E=91?= =?UTF-8?q?=EC=9C=84=20=EA=B0=92=20=EA=B5=AC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 7a800fa9..08744620 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,6 +1,14 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; public class Car { private final String name; private int position=0; public Car(String name){this.name = name;} + private void raceOnce() { + for (Car car : cars) { + int number = Randoms.pickNumberInRange(0, 9); + car.move(number); + } + } + public void move(int number){if(number>=4){position++;}} } \ No newline at end of file From 7ea4c16a8b7741b2384eb6dcc22d62fb7debf0a5 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:37:49 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=EA=B0=80=204?= =?UTF-8?q?=EC=9D=B4=EC=83=81=EC=9D=B4=EB=A9=B4=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=20=EC=A0=84=EC=A7=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 08744620..01375764 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -10,5 +10,6 @@ private void raceOnce() { car.move(number); } } + public void move(int number){if(number>=4){position++;}} } \ No newline at end of file From 04e2fbc019265884be817e5f380095e8aaa7da12 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:38:31 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EA=B0=80=20=EC=A0=84=EC=A7=84=ED=95=9C=20=ED=9A=9F=EC=88=98?= =?UTF-8?q?=EB=A7=8C=ED=81=BC=20-=EB=A1=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 01375764..435c27e3 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -10,6 +10,8 @@ private void raceOnce() { car.move(number); } } - public void move(int number){if(number>=4){position++;}} + public String getName(){return name;} + public int getPosition(){return position;} + public String getPositionSign(){return "-".repeat(position);} } \ No newline at end of file From a2972f0e61dccfaaf679e605483153f4c799566e Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:39:35 +0900 Subject: [PATCH 10/14] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EA=B0=80=20=EC=A0=84=EC=A7=84=ED=95=9C=20=ED=9A=9F=EC=88=98?= =?UTF-8?q?=EB=A7=8C=ED=81=BC=20-=EB=A1=9C=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/RacingGame.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index e69de29b..c49024e4 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -0,0 +1,17 @@ +package racingcar; +import java.util.*; +public class RacingGame { + private List cars; + private int tryCount; + public void start() { + cars = Input.readCarNames(); + tryCount = Input.readTryCount(); + System.out.println("\n실행 결과"); + for (int i = 0; i < tryCount; i++) { + raceOnce(); + Output.printRoundResult(cars); + } + List winners = getWinners(); + Output.printWinners(winners); + } +} \ No newline at end of file From 790556bb63746eb1786e42c5f00280ada303946a Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:40:24 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EC=9D=80=20=EB=A7=8C=ED=81=BC=20=EA=B2=BD=EC=A3=BC=20=EB=B0=98?= =?UTF-8?q?=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/RacingGame.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index c49024e4..a9d1f745 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -3,6 +3,7 @@ public class RacingGame { private List cars; private int tryCount; + public void start() { cars = Input.readCarNames(); tryCount = Input.readTryCount(); From 2ef1141b3a65362989ce8d42fada4f303fc6ef93 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:42:04 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=EA=B0=80=EC=9E=A5=20=EB=A7=8E?= =?UTF-8?q?=EC=9D=B4=20=EC=A0=84=EC=A7=84=ED=95=9C=20=EC=9E=90=EB=8F=99?= =?UTF-8?q?=EC=B0=A8=EB=A5=BC=20=EC=9A=B0=EC=8A=B9=EC=9E=90=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/RacingGame.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index a9d1f745..052609be 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -3,7 +3,6 @@ public class RacingGame { private List cars; private int tryCount; - public void start() { cars = Input.readCarNames(); tryCount = Input.readTryCount(); @@ -15,4 +14,17 @@ public void start() { List winners = getWinners(); Output.printWinners(winners); } + private List getWinners() { + int maxPosition = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElse(0); + List winners = new ArrayList<>(); + for (Car car : cars) { + if (car.getPosition() == maxPosition) { + winners.add(car); + } + } + return winners; + } } \ No newline at end of file From 26284cc3e481ab167a81e3f183aeffa884ed9bab Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:43:00 +0900 Subject: [PATCH 13/14] =?UTF-8?q?feat:=20=EC=98=A4=EB=A5=98(=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=20=EC=9D=B4=EB=A6=84=205=EC=9E=90=20?= =?UTF-8?q?=EC=9D=B4=EB=82=B4,=20=EC=8B=9C=EB=8F=84=20=ED=9A=9F=EC=88=98?= =?UTF-8?q?=200=20=EC=9D=B4=EC=83=81,=20=EC=8B=9C=EB=8F=84=20=ED=9A=9F?= =?UTF-8?q?=EC=88=98=EB=8A=94=20=EC=88=AB=EC=9E=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Validator.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/racingcar/Validator.java b/src/main/java/racingcar/Validator.java index e69de29b..911dbb91 100644 --- a/src/main/java/racingcar/Validator.java +++ b/src/main/java/racingcar/Validator.java @@ -0,0 +1,19 @@ +package racingcar; +public class Validator { + public static void validateCarName(String name) { + if (name == null || name.trim().isEmpty() || name.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 1~5자 이내여야 합니다."); + } + } + public static int validateTryCount(String input) { + try { + int count = Integer.parseInt(input); + if (count < 0) { + throw new IllegalArgumentException("시도 횟수는 0 이상이어야 합니다."); + } + return count; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수는 숫자여야 합니다."); + } + } +} \ No newline at end of file From e929b22365004af07de982ee85202dbfba1c4448 Mon Sep 17 00:00:00 2001 From: castleeom0001-collab Date: Mon, 29 Sep 2025 23:45:40 +0900 Subject: [PATCH 14/14] =?UTF-8?q?feat:=20=EC=88=98=EC=A0=95=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 8 +------- src/main/java/racingcar/RacingGame.java | 7 +++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 435c27e3..bfe4cf33 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -1,15 +1,9 @@ package racingcar; -import camp.nextstep.edu.missionutils.Randoms; public class Car { private final String name; private int position=0; public Car(String name){this.name = name;} - private void raceOnce() { - for (Car car : cars) { - int number = Randoms.pickNumberInRange(0, 9); - car.move(number); - } - } + public void move(int number){if(number>=4){position++;}} public String getName(){return name;} public int getPosition(){return position;} diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java index 052609be..5ee93382 100644 --- a/src/main/java/racingcar/RacingGame.java +++ b/src/main/java/racingcar/RacingGame.java @@ -1,4 +1,5 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; import java.util.*; public class RacingGame { private List cars; @@ -14,6 +15,12 @@ public void start() { List winners = getWinners(); Output.printWinners(winners); } + private void raceOnce() { + for (Car car : cars) { + int number = Randoms.pickNumberInRange(0, 9); + car.move(number); + } + } private List getWinners() { int maxPosition = cars.stream() .mapToInt(Car::getPosition)