diff --git a/README.md b/README.md index d0286c859f..c545cf04b5 100644 --- a/README.md +++ b/README.md @@ -1 +1,43 @@ # java-racingcar-precourse + +# 자동차 경주 +> 이 프로젝트는 초간단 자동차 경주 게임을 구현한 것 입니다. + +  + +## 기능 요구 사항 +1. 게임 시작 및 초기화 +- 참가자 이름 입력: 여러 대의 자동차 이름을 입력받습니다. 이름은 쉼표(,)로 구분되며, 각 이름은 최대 5글자까지만 허용됩니다. +- 예외 처리: 이름이 5글자를 초과하는 경우 IllegalArgumentException을 발생시킵니다. + +  +  + +2. 경주 진행 +- 라운드 진행: 각 라운드마다 모든 자동차는 무작위로 이동 여부를 결정합니다. +- 이동 조건: 0에서 9 사이의 난수를 생성하고, 값이 4 이상이면 자동차가 전진합니다. +- 난수 생성은 camp.nextstep.edu.missionutils.Randoms.pickNumberInRange(0, 9) 메서드를 사용합니다. +- 상태 출력: 각 라운드마다 모든 자동차의 이름과 현재 위치를 '-'로 표시하여 출력합니다. +  + +<실행 결과 예시> +``` +pobi : -- +woni : - +jun : --- + +``` + +  +  + +3. 우승자 선정 +최종 우승자 결정: 모든 라운드가 끝난 후, 가장 많이 전진한 자동차가 우승자로 선정됩니다. +동시 우승 처리: 여러 대의 자동차가 같은 거리만큼 전진하여 우승자가 여러 명일 경우, 모든 우승자의 이름을 출력합니다. + +  +<실행 결과 예시> +``` +최종 우승자 : pobi, jun + +``` diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e724..643496dae1 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,15 @@ package racingcar; +import camp.nextstep.edu.missionutils.Console; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String car = Console.readLine(); + + System.out.println("시도할 횟수는 몇 회인가요?"); + String number = Console.readLine(); + + RacingGame.race(car, number); } } diff --git a/src/main/java/racingcar/RacingGame.java b/src/main/java/racingcar/RacingGame.java new file mode 100644 index 0000000000..a681dec733 --- /dev/null +++ b/src/main/java/racingcar/RacingGame.java @@ -0,0 +1,65 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Randoms; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class RacingGame { + public static void race(String car, String number) { + List names = Arrays.asList(car.split(",")); + + for (String playerName : names) { + if (playerName.trim().length() > 5) { + throw new IllegalArgumentException("자동차 이름은 5글자 이하여야 합니다."); + } + } + + int n = Integer.parseInt(number); + + Map map2 = new HashMap<>(); + for (String playerName : names) { + map2.put(playerName, 0); + } + // 경주 진행 + for (int i = 0; i < n; i++) { + for (String playerName : names) { + if (Randoms.pickNumberInRange(0, 9) >= 4) { + map2.put(playerName, map2.get(playerName) + 1); + } + } + + System.out.println("실행 결과"); + for (String playerName : names) { + int score = map2.get(playerName); + String dashes = "-".repeat(score); + System.out.println(playerName.trim() + " : " + dashes); + } + System.out.println(); + } + + // 우승자 결정하기 + List highestScorer = new ArrayList<>(); + int highestScore = -1; + + for (Map.Entry entry : map2.entrySet()) { + if (entry.getValue() > highestScore) { + highestScore = entry.getValue(); + highestScorer.clear(); + highestScorer.add(entry.getKey()); + } else if (entry.getValue() == highestScore) { + highestScorer.add(entry.getKey()); + } + } + + if (highestScorer != null) { + System.out.println("최종 우승자 : " + String.join(", ", highestScorer)); + } else { + System.out.println("참가자가 없습니다."); + } + } + +} +