From fecd62fcfae5b1d9926120661ab9a4f0eccafe17 Mon Sep 17 00:00:00 2001 From: manopickax Date: Sun, 29 Mar 2026 23:23:56 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20Car=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=98=88=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 | 42 +++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..8fefdb4 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,47 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.List; +import java.util.ArrayList; public class Application { + public static void main(String[] args) { - // TODO: 프로그램 구현 + List cars = createCars(); + } + + private static List createCars() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String input = Console.readLine(); + String[] names = input.split(","); + + List cars = new ArrayList<>(); + for (String name : names) { + cars.add(new Car(name.trim())); + } + return cars; + } +} + +class Car { + private final String name; + private int distance = 0; + int randomNumber = Randoms.pickNumberInRange(0, 9); + + public Car (String name) { + validateName(name); + this.name = name; } + private void validateName(String name){ + if (name == null || name.isBlank() || name.length() > 5) { + throw new IllegalArgumentException ("올바른 값을 입력해주세요. (문자열을 입력하세요.)"); + } + } + public void move(int randomNumber) { + if (randomNumber >= 4) { + distance ++; + } + } + } From 57db6ec8c9dcc906c0a1e0cbc0cf498143b19453 Mon Sep 17 00:00:00 2001 From: manopickax Date: Mon, 30 Mar 2026 00:08:56 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20GameManager=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EC=98=88=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 | 55 +++++++++++++++++------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 8fefdb4..4f5e98a 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -6,28 +6,15 @@ import java.util.ArrayList; public class Application { - public static void main(String[] args) { - List cars = createCars(); - } - - private static List createCars() { - System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String input = Console.readLine(); - String[] names = input.split(","); - - List cars = new ArrayList<>(); - for (String name : names) { - cars.add(new Car(name.trim())); - } - return cars; + GameManager gameManager = new GameManager(); + gameManager.start(); } } class Car { private final String name; private int distance = 0; - int randomNumber = Randoms.pickNumberInRange(0, 9); public Car (String name) { validateName(name); @@ -43,5 +30,43 @@ public void move(int randomNumber) { distance ++; } } + public void printStatus() { + System.out.println(name + " : " + " - ".repeat(distance)); + } +} + +class GameManager { + public void start() { + List cars = createCars(); + System.out.println("시도할 회수"); + String inputNum = Console.readLine(); + int attempts = Integer.parseInt(inputNum); + if (attempts <= 0 ) { + throw new IllegalArgumentException ("0이상 입력하세요."); + } + for(int i = 1; i <= attempts; i++){ + int randomNumber = Randoms.pickNumberInRange(0, 9); + for (Car car : cars){ + car.move(randomNumber); + car.printStatus(); + } + System.out.println(" "); + } + + } + private static List createCars() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String inputName = Console.readLine(); + String[] names = inputName.split(","); + List cars = new ArrayList<>(); + for (String name : names) { + cars.add(new Car(name.trim())); + } + return cars; + } } + +class WinnerPicker { + +} \ No newline at end of file From c2166403156a08c9f3d24c028b7f35c9cfc3c739 Mon Sep 17 00:00:00 2001 From: manopickax Date: Mon, 30 Mar 2026 13:06:39 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20WinnerPicker=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EA=B8=B0=EB=8A=A5=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/racingcar/Application.java | 31 ++++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 4f5e98a..95fd484 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,6 @@ package racingcar; import camp.nextstep.edu.missionutils.Console; import camp.nextstep.edu.missionutils.Randoms; - import java.util.List; import java.util.ArrayList; @@ -33,26 +32,34 @@ public void move(int randomNumber) { public void printStatus() { System.out.println(name + " : " + " - ".repeat(distance)); } + public int getDistance() { + return distance; + } + public String getName() { + return name; + } + } class GameManager { public void start() { List cars = createCars(); - System.out.println("시도할 회수"); + System.out.println("시도할 회수는 몇회인가요?"); String inputNum = Console.readLine(); int attempts = Integer.parseInt(inputNum); if (attempts <= 0 ) { throw new IllegalArgumentException ("0이상 입력하세요."); } for(int i = 1; i <= attempts; i++){ - int randomNumber = Randoms.pickNumberInRange(0, 9); for (Car car : cars){ + int randomNumber = Randoms.pickNumberInRange(0, 9); car.move(randomNumber); car.printStatus(); } System.out.println(" "); } - + WinnerPicker winnerPicker = new WinnerPicker(); + winnerPicker.pirntWinner(cars); } private static List createCars() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); @@ -68,5 +75,19 @@ private static List createCars() { } class WinnerPicker { - + public void pirntWinner(List cars) { + int maxdistance = 0; + for (Car car : cars) { + if (car.getDistance() > maxdistance) { + maxdistance = car.getDistance(); + } + } + List winnercars = new ArrayList<>(); + for (Car car : cars) { + if (car.getDistance() == maxdistance) { + winnercars.add(car.getName()); + } + } + System.out.println(winnercars); + } } \ No newline at end of file From 052ae1771f9547a105e51532b0a9370b2d46fe60 Mon Sep 17 00:00:00 2001 From: manopickax Date: Mon, 30 Mar 2026 22:14:12 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20test=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 30 +++++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 95fd484..821a06d 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -14,37 +14,40 @@ public static void main(String[] args) { class Car { private final String name; private int distance = 0; - public Car (String name) { validateName(name); this.name = name; } + private void validateName(String name){ - if (name == null || name.isBlank() || name.length() > 5) { + if (name == null || name.isBlank() || name.length() > 5 || name.contains(" ")) { throw new IllegalArgumentException ("올바른 값을 입력해주세요. (문자열을 입력하세요.)"); } } + public void move(int randomNumber) { if (randomNumber >= 4) { distance ++; } } + public void printStatus() { - System.out.println(name + " : " + " - ".repeat(distance)); + System.out.println(name + " : " + "-".repeat(distance)); } + public int getDistance() { return distance; } + public String getName() { return name; } - } class GameManager { public void start() { List cars = createCars(); - System.out.println("시도할 회수는 몇회인가요?"); + System.out.println("시도할 회수는 몇 회인가요?"); String inputNum = Console.readLine(); int attempts = Integer.parseInt(inputNum); if (attempts <= 0 ) { @@ -56,19 +59,27 @@ public void start() { car.move(randomNumber); car.printStatus(); } - System.out.println(" "); + System.out.println(); + System.out.println("실행 결과"); } WinnerPicker winnerPicker = new WinnerPicker(); winnerPicker.pirntWinner(cars); } + private static List createCars() { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String inputName = Console.readLine(); String[] names = inputName.split(","); - List cars = new ArrayList<>(); for (String name : names) { - cars.add(new Car(name.trim())); + cars.add(new Car(name)); + for (int i = 0; i < cars.size(); i++) { + for (int j = i + 1; j < cars.size(); j++) { + if (cars.get(i).getName().equals(cars.get(j).getName())) { + throw new IllegalArgumentException("중복된 값 입니다."); + } + } + } } return cars; } @@ -82,12 +93,13 @@ public void pirntWinner(List cars) { maxdistance = car.getDistance(); } } + List winnercars = new ArrayList<>(); for (Car car : cars) { if (car.getDistance() == maxdistance) { winnercars.add(car.getName()); } } - System.out.println(winnercars); + System.out.println("최종 우승자 : " + String.join(", ", winnercars)); } } \ No newline at end of file