From 5782e255fbe51a95f071a746f624f5ea5d7c2ebc Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Fri, 27 Mar 2026 21:15:45 +0900 Subject: [PATCH 01/13] =?UTF-8?q?feat:=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0?= =?UTF-8?q?=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 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e..00b1eec 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,14 @@ package racingcar; +import java.util.Scanner; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Scanner input = new Scanner(System.in); + + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String carName = input.nextLine(); + System.out.println("시도할 회수는 몇회인가요?"); + int racingCounts = input.nextInt(); } } From f8158ca32590264b351388d5c2e2fb56463d5d14 Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Fri, 27 Mar 2026 22:27:06 +0900 Subject: [PATCH 02/13] =?UTF-8?q?feat:=20=EC=B0=A8=EC=88=98=EB=B3=84=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=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 --- src/main/java/racingcar/Application.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 00b1eec..0de8320 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -8,7 +8,22 @@ public static void main(String[] args) { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String carName = input.nextLine(); + String tokens[] = carName.split(","); + System.out.println("시도할 회수는 몇회인가요?"); int racingCounts = input.nextInt(); + + System.out.println("\n실행 결과"); + startRacing(tokens, racingCounts); + } + + public static void startRacing(String[] tokens, int counts) { + for (int i = 5; i <= counts; i++) { + for (String x : tokens) { + System.out.print(x + " : "); + //랜덤한 출력을 해줄 함수 + System.out.println(); + } + } } } From 2ef3bd595358a96858ccc7b50b165267f3533b4c Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Fri, 27 Mar 2026 22:52:18 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EC=A0=84=EC=A7=84=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 | 33 +++++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 0de8320..39574ca 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,29 +1,48 @@ package racingcar; +import java.util.ArrayList; +import java.util.Random; import java.util.Scanner; public class Application { public static void main(String[] args) { Scanner input = new Scanner(System.in); + ArrayList arrayList = new ArrayList<>(); // 전진상황 리스트 System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String carName = input.nextLine(); String tokens[] = carName.split(","); + for (int i = 0; i < tokens.length; i++) { + arrayList.add(0); + } System.out.println("시도할 회수는 몇회인가요?"); int racingCounts = input.nextInt(); System.out.println("\n실행 결과"); - startRacing(tokens, racingCounts); + arrayList = startRacing(tokens, racingCounts, arrayList); } - public static void startRacing(String[] tokens, int counts) { - for (int i = 5; i <= counts; i++) { - for (String x : tokens) { - System.out.print(x + " : "); - //랜덤한 출력을 해줄 함수 - System.out.println(); + public static ArrayList startRacing(String[] tokens, int counts, ArrayList arrayList) { + for (int i = 1; i <= counts; i++) { + for (int j=0; j < tokens.length; j++) { + System.out.print(tokens[j] + " : "); + arrayList = goOrStop(j, arrayList); + System.out.println("- ".repeat(arrayList.get(j))); } + System.out.println(); + } + + return arrayList; + } + + public static ArrayList goOrStop(int index, ArrayList arrayList) { + Random random = new Random(); + int randomNum = random.nextInt(10); + if (randomNum >= 4) { + arrayList.set(index, arrayList.get(index) + 1); } + + return arrayList; } } From 7609a87305516aba4330f6b61e16d67c765454af Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Fri, 27 Mar 2026 23:37:02 +0900 Subject: [PATCH 04/13] =?UTF-8?q?feat:=20=EC=9A=B0=EC=8A=B9=EC=9E=90=20?= =?UTF-8?q?=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=20=EC=B6=9C=EB=A0=A5=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 --- src/main/java/racingcar/Application.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 39574ca..3055d29 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,6 +1,7 @@ package racingcar; import java.util.ArrayList; +import java.util.Collections; import java.util.Random; import java.util.Scanner; @@ -21,6 +22,8 @@ public static void main(String[] args) { System.out.println("\n실행 결과"); arrayList = startRacing(tokens, racingCounts, arrayList); + + winner(tokens, arrayList); } public static ArrayList startRacing(String[] tokens, int counts, ArrayList arrayList) { @@ -45,4 +48,20 @@ public static ArrayList goOrStop(int index, ArrayList arrayLis return arrayList; } + + public static void winner(String[] tokens, ArrayList arrayList) { + int max = Collections.max(arrayList); + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < arrayList.size(); i++) { + if (arrayList.get(i) == max) { + if (!sb.isEmpty()) { + sb.append(", "); + } + sb.append(tokens[i]); + } + } + + System.out.println("최종 우승자 : " + sb); + } } From c8dabab7fb52dcbcdd3a6b8945681fa8bbf7fdfb Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 28 Mar 2026 00:06:12 +0900 Subject: [PATCH 05/13] =?UTF-8?q?feat:=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=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 | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 3055d29..4fa905a 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -12,9 +12,18 @@ public static void main(String[] args) { System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String carName = input.nextLine(); - String tokens[] = carName.split(","); - for (int i = 0; i < tokens.length; i++) { - arrayList.add(0); + String[] tokens = carName.split(","); + + try { + for (int i = 0; i < tokens.length; i++) { + if (tokens[i].length() > 5) { + throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); + } + arrayList.add(0); + } + } catch (IllegalArgumentException e) { + System.err.println("오류 발생: " + e.getMessage()); + System.exit(0); } System.out.println("시도할 회수는 몇회인가요?"); From 8a2c00889f2ace04f6c62b8a281757bad782744b Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Mon, 30 Mar 2026 10:27:35 +0900 Subject: [PATCH 06/13] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1,=20refactor:=20Random,?= =?UTF-8?q?=20Scanner=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 14 +++++++++++ src/main/java/racingcar/Application.java | 31 +++++++++++------------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/docs/README.md b/docs/README.md index e69de29..c2b8c6b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,14 @@ +입력 기능 +- 사용자 입력을 받는 기능 + +차수별 실행 결과 출력 +- 사용자 입력값에 기반해 차수만큼 자동차 진행결과 출력 + +자동차 전진 기능 +- 랜덤한 수가 4 이상이면 자동차 - 출력 + +우승자 안내 문구 출력 +- 우승자 안내, 쉼표로 우승자 나열 + +예외처리 +- 자동차 이름이 5 이상이면 예외발생 \ No newline at end of file diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 4fa905a..8de6bde 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,36 +1,34 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; + import java.util.ArrayList; import java.util.Collections; -import java.util.Random; -import java.util.Scanner; +import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; +import static camp.nextstep.edu.missionutils.Console.readLine; public class Application { public static void main(String[] args) { - Scanner input = new Scanner(System.in); ArrayList arrayList = new ArrayList<>(); // 전진상황 리스트 System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); - String carName = input.nextLine(); + String carName = readLine(); String[] tokens = carName.split(","); - try { - for (int i = 0; i < tokens.length; i++) { - if (tokens[i].length() > 5) { - throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); - } - arrayList.add(0); + for (int i = 0; i < tokens.length; i++) { + if (tokens[i].length() > 5) { + throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); } - } catch (IllegalArgumentException e) { - System.err.println("오류 발생: " + e.getMessage()); - System.exit(0); + arrayList.add(0); } System.out.println("시도할 회수는 몇회인가요?"); - int racingCounts = input.nextInt(); + String racingCounts = readLine(); + int counts = Integer.parseInt(racingCounts); System.out.println("\n실행 결과"); - arrayList = startRacing(tokens, racingCounts, arrayList); + arrayList = startRacing(tokens, counts, arrayList); winner(tokens, arrayList); } @@ -49,8 +47,7 @@ public static ArrayList startRacing(String[] tokens, int counts, ArrayL } public static ArrayList goOrStop(int index, ArrayList arrayList) { - Random random = new Random(); - int randomNum = random.nextInt(10); + int randomNum = pickNumberInRange(0,9); if (randomNum >= 4) { arrayList.set(index, arrayList.get(index) + 1); } From 3c60903b122aafe3ad8eff08c9d2d9e811b4ea24 Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Mon, 30 Mar 2026 23:00:58 +0900 Subject: [PATCH 07/13] =?UTF-8?q?feat:=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=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 | 76 +++++++++++++++++--- src/test/java/racingcar/ApplicationTest.java | 1 + 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 8de6bde..a2b4213 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,36 +1,90 @@ package racingcar; -import camp.nextstep.edu.missionutils.Console; -import camp.nextstep.edu.missionutils.Randoms; - import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; + import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; import static camp.nextstep.edu.missionutils.Console.readLine; public class Application { public static void main(String[] args) { ArrayList arrayList = new ArrayList<>(); // 전진상황 리스트 + HashSet uniqueElements = new HashSet<>(); System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String carName = readLine(); + + nameException(carName); + String[] tokens = carName.split(","); + equalException(tokens, uniqueElements); + arrayList = exception(tokens, arrayList); + + System.out.println("시도할 횟수는 몇 회인가요?"); + String racingCount = readLine(); + int counts = tryCountNumCheckException(racingCount); + tryCountException(counts); + + System.out.println(); + System.out.println("실행 결과"); + arrayList = startRacing(tokens, counts, arrayList); + + winner(tokens, arrayList); + } + + public static void nameException(String carName) { + if (carName == null || carName.isBlank()) { + throw new IllegalArgumentException("이름을 입력하지 않았습니다."); + } + + if (carName.endsWith(",")) { + throw new IllegalArgumentException("마지막은 쉼표로 끝날 수 없습니다."); + } + } + + public static ArrayList exception(String[] tokens, ArrayList arrayList) { + if (tokens.length == 0) { + throw new IllegalArgumentException("자동차를 적어야합니다."); + } for (int i = 0; i < tokens.length; i++) { if (tokens[i].length() > 5) { throw new IllegalArgumentException("자동차 이름은 5자 이하만 가능합니다."); } + if (tokens[i].isBlank()) { + throw new IllegalArgumentException("자동차 이름을 적어야 합니다."); + } + if (tokens[i].contains(" ")) { + throw new IllegalArgumentException("자동차 이름에 공백은 불가능합니다."); + } arrayList.add(0); } - System.out.println("시도할 회수는 몇회인가요?"); - String racingCounts = readLine(); - int counts = Integer.parseInt(racingCounts); + return arrayList; + } - System.out.println("\n실행 결과"); - arrayList = startRacing(tokens, counts, arrayList); + public static void equalException(String[] tokens, HashSet uniqueElements) { + for (String token : tokens) { + if (!uniqueElements.add(token)) { + throw new IllegalArgumentException("자동차 이름이 중복됩니다."); + } + } + } - winner(tokens, arrayList); + public static void tryCountException(int counts) { + if (counts < 1) { + throw new IllegalArgumentException("시도 횟수는 0보다 커야합니다."); + } + } + + public static int tryCountNumCheckException(String racingCount) { + try { + int box = Integer.parseInt(racingCount); + return box; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시도 횟수는 숫자여야합니다."); + } } public static ArrayList startRacing(String[] tokens, int counts, ArrayList arrayList) { @@ -38,7 +92,7 @@ public static ArrayList startRacing(String[] tokens, int counts, ArrayL for (int j=0; j < tokens.length; j++) { System.out.print(tokens[j] + " : "); arrayList = goOrStop(j, arrayList); - System.out.println("- ".repeat(arrayList.get(j))); + System.out.println("-".repeat(arrayList.get(j))); } System.out.println(); } @@ -61,7 +115,7 @@ public static void winner(String[] tokens, ArrayList arrayList) { for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i) == max) { - if (!sb.isEmpty()) { + if (sb.length() > 0) { sb.append(", "); } sb.append(tokens[i]); diff --git a/src/test/java/racingcar/ApplicationTest.java b/src/test/java/racingcar/ApplicationTest.java index 03aa74b..43a717e 100644 --- a/src/test/java/racingcar/ApplicationTest.java +++ b/src/test/java/racingcar/ApplicationTest.java @@ -20,6 +20,7 @@ class ApplicationTest extends NsTest { assertThat(output()).contains("pobi : -", "woni : ", "최종 우승자 : pobi"); }, MOVING_FORWARD, STOP + ); } From a4347092644a63fa4ba0b601f5d990e8d2a14bcc Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 01:24:45 +0900 Subject: [PATCH 08/13] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=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 | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index c2b8c6b..9acf915 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,14 +1,28 @@ +자동차 경주 +- + +`기능` + 입력 기능 -- 사용자 입력을 받는 기능 +- 각 자동차에 이름 부여(쉼표를 기준으로 구분하여 입력) +- 몇 번의 이동을 할 것인지 입력 -차수별 실행 결과 출력 +차수별 실행 결과 출력 기능 - 사용자 입력값에 기반해 차수만큼 자동차 진행결과 출력 자동차 전진 기능 -- 랜덤한 수가 4 이상이면 자동차 - 출력 +- [전진] : 0~9 사이에서 무작위 값을 구한 후 4 이상이면 자동차 '-' 출력 +- [멈춤] : 4미만이면 정지. 출력X -우승자 안내 문구 출력 +우승자 안내 문구 출력 기능 - 우승자 안내, 쉼표로 우승자 나열 -예외처리 -- 자동차 이름이 5 이상이면 예외발생 \ No newline at end of file +`예외처리` + +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생 +- 자동차 이름 5자 초과 +- 이름 공백 포함 +- 이름 빈값 +- 이름 중복 +- 시도 횟수 0이하 +- 시도 횟수 숫자 아님 From ed3c3a326c40df9eb0835e371912238dc5632bf7 Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 15:18:02 +0900 Subject: [PATCH 09/13] =?UTF-8?q?refactor:=20Car=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Car.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/racingcar/Car.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java new file mode 100644 index 0000000..314168c --- /dev/null +++ b/src/main/java/racingcar/Car.java @@ -0,0 +1,15 @@ +package racingcar; + +public class Car { + private String carName; + private int movement; + + public Car(String carName) { + this.carName = carName; + this.movement = 0; + } + + public void move() { + movement += 1; + } +} From 81acf3d05bb64cde97dd35727d3aa3def306b6dd Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 15:29:50 +0900 Subject: [PATCH 10/13] =?UTF-8?q?refactor:=20Racing=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Racing.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/racingcar/Racing.java diff --git a/src/main/java/racingcar/Racing.java b/src/main/java/racingcar/Racing.java new file mode 100644 index 0000000..e7de3fd --- /dev/null +++ b/src/main/java/racingcar/Racing.java @@ -0,0 +1,13 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; + +public class Racing { + + public void goOrStrop(Car car) { + int randomNum = Randoms.pickNumberInRange(0, 9); + if (randomNum >= 4) { + car.move(); + } + } +} From cc6a2008c04a016154b2b1c2fc01e3785f7733a9 Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 16:09:58 +0900 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20View=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=91=EC=84=B1?= 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/View.java | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/main/java/racingcar/View.java diff --git a/src/main/java/racingcar/Car.java b/src/main/java/racingcar/Car.java index 314168c..606d3fa 100644 --- a/src/main/java/racingcar/Car.java +++ b/src/main/java/racingcar/Car.java @@ -12,4 +12,12 @@ public Car(String carName) { public void move() { movement += 1; } + + public String checkCarName() { + return carName; + } + + public int checkMovement() { + return movement; + } } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java new file mode 100644 index 0000000..885985a --- /dev/null +++ b/src/main/java/racingcar/View.java @@ -0,0 +1,8 @@ +package racingcar; + +public class View { + + public void racingCurrentView(Car car) { + System.out.println(car.checkCarName() + " : " + "-".repeat(car.checkMovement())); + } +} From 2cbf37c54837d756dc33efe1edd377ffda162dcd Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 17:25:06 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20Application=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81,=20Vi?= =?UTF-8?q?ew=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9A=B0=EC=8A=B9=EC=9E=90?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 74 +++++++----------------- src/main/java/racingcar/View.java | 22 +++++++ 2 files changed, 43 insertions(+), 53 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a2b4213..35e1511 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,37 +1,46 @@ package racingcar; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; -import static camp.nextstep.edu.missionutils.Randoms.pickNumberInRange; import static camp.nextstep.edu.missionutils.Console.readLine; public class Application { public static void main(String[] args) { - ArrayList arrayList = new ArrayList<>(); // 전진상황 리스트 HashSet uniqueElements = new HashSet<>(); System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); String carName = readLine(); - nameException(carName); + nameException(carName); // 예외처리 String[] tokens = carName.split(","); - equalException(tokens, uniqueElements); - arrayList = exception(tokens, arrayList); + equalException(tokens, uniqueElements); // 예외처리 + exception(tokens); // 예외처리 + + Car[] cars = new Car[tokens.length]; + for (int i = 0; i < tokens.length; i++) { + cars[i] = new Car(tokens[i]); + } System.out.println("시도할 횟수는 몇 회인가요?"); String racingCount = readLine(); - int counts = tryCountNumCheckException(racingCount); - tryCountException(counts); + int counts = tryCountNumCheckException(racingCount); // 예외처리 + tryCountException(counts); // 예외처리 System.out.println(); System.out.println("실행 결과"); - arrayList = startRacing(tokens, counts, arrayList); + Racing race = new Racing(); + View view = new View(); + for (int i = 0; i < counts; i++) { + for (int j = 0; j < tokens.length; j++) { + race.goOrStrop(cars[j]); + view.racingCurrentView(cars[j]); + } + System.out.println(); + } - winner(tokens, arrayList); + view.winner(cars); } public static void nameException(String carName) { @@ -44,7 +53,7 @@ public static void nameException(String carName) { } } - public static ArrayList exception(String[] tokens, ArrayList arrayList) { + public static void exception(String[] tokens) { if (tokens.length == 0) { throw new IllegalArgumentException("자동차를 적어야합니다."); } @@ -58,10 +67,7 @@ public static ArrayList exception(String[] tokens, ArrayList a if (tokens[i].contains(" ")) { throw new IllegalArgumentException("자동차 이름에 공백은 불가능합니다."); } - arrayList.add(0); } - - return arrayList; } public static void equalException(String[] tokens, HashSet uniqueElements) { @@ -86,42 +92,4 @@ public static int tryCountNumCheckException(String racingCount) { throw new IllegalArgumentException("시도 횟수는 숫자여야합니다."); } } - - public static ArrayList startRacing(String[] tokens, int counts, ArrayList arrayList) { - for (int i = 1; i <= counts; i++) { - for (int j=0; j < tokens.length; j++) { - System.out.print(tokens[j] + " : "); - arrayList = goOrStop(j, arrayList); - System.out.println("-".repeat(arrayList.get(j))); - } - System.out.println(); - } - - return arrayList; - } - - public static ArrayList goOrStop(int index, ArrayList arrayList) { - int randomNum = pickNumberInRange(0,9); - if (randomNum >= 4) { - arrayList.set(index, arrayList.get(index) + 1); - } - - return arrayList; - } - - public static void winner(String[] tokens, ArrayList arrayList) { - int max = Collections.max(arrayList); - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < arrayList.size(); i++) { - if (arrayList.get(i) == max) { - if (sb.length() > 0) { - sb.append(", "); - } - sb.append(tokens[i]); - } - } - - System.out.println("최종 우승자 : " + sb); - } } diff --git a/src/main/java/racingcar/View.java b/src/main/java/racingcar/View.java index 885985a..6726005 100644 --- a/src/main/java/racingcar/View.java +++ b/src/main/java/racingcar/View.java @@ -5,4 +5,26 @@ public class View { public void racingCurrentView(Car car) { System.out.println(car.checkCarName() + " : " + "-".repeat(car.checkMovement())); } + + public void winner(Car[] cars) { + int max = cars[0].checkMovement(); + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < cars.length; i++) { + if (max < cars[i].checkMovement()) { + max = cars[i].checkMovement(); + } + } + + for (int j = 0; j < cars.length; j++) { + if (cars[j].checkMovement() == max) { + if (sb.length() > 0) { + sb.append(", "); + } + sb.append(cars[j].checkCarName()); + } + } + + System.out.println("최종 우승자 : " + sb); + } } From f6ca1ad5570ba346e668a0920f84e13ac02df2eb Mon Sep 17 00:00:00 2001 From: Yoon JiHo Date: Sat, 4 Apr 2026 18:41:57 +0900 Subject: [PATCH 13/13] =?UTF-8?q?refactor:=20Application=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 35e1511..d529a4c 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -15,8 +15,8 @@ public static void main(String[] args) { String[] tokens = carName.split(","); - equalException(tokens, uniqueElements); // 예외처리 - exception(tokens); // 예외처리 + equalNameException(tokens, uniqueElements); // 예외처리 + eachNameException(tokens); // 예외처리 Car[] cars = new Car[tokens.length]; for (int i = 0; i < tokens.length; i++) { @@ -53,7 +53,7 @@ public static void nameException(String carName) { } } - public static void exception(String[] tokens) { + public static void eachNameException(String[] tokens) { if (tokens.length == 0) { throw new IllegalArgumentException("자동차를 적어야합니다."); } @@ -70,7 +70,7 @@ public static void exception(String[] tokens) { } } - public static void equalException(String[] tokens, HashSet uniqueElements) { + public static void equalNameException(String[] tokens, HashSet uniqueElements) { for (String token : tokens) { if (!uniqueElements.add(token)) { throw new IllegalArgumentException("자동차 이름이 중복됩니다.");