Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[자동차 경주] 곽영규 미션 제출합니다. #1468

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
4ebe726
docs(readme): README.md 파일에 2주차 과제에 대한 개괄과 기능목록 정리
sobaman Oct 27, 2024
5ac4dde
docs(readme): README.md 파일에 사진 추가
sobaman Oct 27, 2024
4756c39
feat(racingCarLauncher): 자동차 이름을 입력 받아 처리하는 inputCars 메서드 구현
sobaman Oct 27, 2024
7dc867d
refactoring(racingCarLauncher): Map 인스턴스 이름을 recentRecord 에서 currentR…
sobaman Oct 28, 2024
7c0feab
feat(car): 기존 racingCarLauncher 에 같이 존재했던 currentRecord 를 Car 객체로 따로 분리
sobaman Oct 28, 2024
515d375
feat(RacingManager): 기존 racingCarLauncher 에 혼재돼있던 실행메서드와 핵심 기능 로직을 분리…
sobaman Oct 28, 2024
4d9370c
feat(RacingManager): 넘겨받은 횟수만큼 반복하는 race 기능 구현
sobaman Oct 28, 2024
fe20d86
feat(RacingManager): 최다 전진을 기록한 race 우승자를 출력하는 기능 구현
sobaman Oct 28, 2024
b9f6585
refactoring(racingCarLauncher): 클래스 이름 변경 racingCarLauncher -> Racing…
sobaman Oct 28, 2024
15814ce
refactoring(car): 문제 요구 조건은 무작위로 추출한 수 만큼 전진하는 게 아니라 4이상이면 "-" 를 추가하는…
sobaman Oct 28, 2024
c5f0848
refactoring(racing-manager): 문제 요구 조건은 무작위로 추출한 수 만큼 전진하는 게 아니라 4이상이면…
sobaman Oct 28, 2024
d6c8d27
refactoring(racing-car-launcher): 오타 수정 "(이름은 쉼표(,) 기준으로 구분" -> "이름은 …
sobaman Oct 28, 2024
b8e8bf6
feat(app-config): RacingCarLauncher 의 설정을 위한 config 클래스 생성
sobaman Oct 28, 2024
899dfc8
test(racing-manager): racingManager 통합 기능 테스트
sobaman Oct 28, 2024
d680e6f
feat: 실행 영역인 Application 구현
sobaman Oct 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,34 @@
# java-racingcar-precourse
![img.png](img.png)

# 프리코스 2주차 과제 - 자동차 경주

---

> 우아한 테크코스 7기 프리코스 2주차 과제 자동차 경주를 구현한 저장소입니다.


![img_1.png](img_1.png)



## 기능목록

---

### 입력된 자동차들을 등록

- Map 으로 자동차의 이름과 전진 횟수를 저장
- 이름은 5자 이하로 제한
- 자동차들은 쉼표로 구분

### 시도할 횟수를 입력받아 반복 처리

- 넘겨받은 횟수 만큼 반복 처리
- 차수별로 실행 결과를 출력

### 전진 조건을 검증하는 로직 구현
- 0,9 사이에서 무작위로 추출한 값이 4 이상이면 전진, 아니면 정지

### 모든 차수 완료 후 우승자 안내 문구 출력
- 가장 많은 전진 횟수를 기록한 자동차를 반환
- 공동 우승자일 경우도 처리
Binary file added img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions src/main/java/racingcar/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package racingcar;

import racingcar.config.AppConfig;
import racingcar.manager.RacingManager;

public class Application {


public static void main(String[] args) {
// TODO: 프로그램 구현
AppConfig appConfig = new AppConfig();
RacingCarLauncher racingCarLauncher = appConfig.racingCarLauncher();
racingCarLauncher.start();
}
}
27 changes: 27 additions & 0 deletions src/main/java/racingcar/RacingCarLauncher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package racingcar;

import camp.nextstep.edu.missionutils.Console;
import racingcar.manager.RacingManager;

public class RacingCarLauncher {

private final RacingManager racingManager;

public RacingCarLauncher(RacingManager racingManager) {
this.racingManager = racingManager;
}

public void start() {
System.out.println("경주할 자동차 이름을 입력하세요. 이름은 쉼표(,) 기준으로 구분");
String carNames = Console.readLine();
racingManager.registerCars(carNames);

System.out.println("시도할 횟수는 몇 회인가요?");
String count = Console.readLine();
racingManager.race(count);

racingManager.presentWinner();
}


}
13 changes: 13 additions & 0 deletions src/main/java/racingcar/config/AppConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package racingcar.config;

import racingcar.RacingCarLauncher;
import racingcar.manager.RacingManager;

public class AppConfig {

public RacingCarLauncher racingCarLauncher(){
RacingManager racingManager = new RacingManager();
return new RacingCarLauncher(racingManager);
}

}
62 changes: 62 additions & 0 deletions src/main/java/racingcar/manager/RacingManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package racingcar.manager;

import camp.nextstep.edu.missionutils.Randoms;
import racingcar.model.Car;

import java.util.ArrayList;
import java.util.List;

public class RacingManager {

private final List<Car> cars = new ArrayList<>();

public void registerCars(String carNames) {

String[] split = carNames.split(",");

for (String carName : split) {

isDuplicatedName(carName);
cars.add(Car.of(carName));
}
}

public void race(String count) {
int parsedCount = Integer.parseInt(count);
System.out.println("실행 결과");

for (int i = 0; i < parsedCount; i++) {
cars.forEach(
car -> {
int picked = Randoms.pickNumberInRange(0, 9);
if (picked >= 4) {
car.move();
}
System.out.println(car.getName() + " : " + car.getForwardMark());
}
);
System.out.println();
}
}

public void presentWinner() {

int max = cars.stream().mapToInt(car -> car.getForward()).max().orElse(0);

List<String> winners = new ArrayList<>();

for(Car car : cars){
if (car.getForward() == max) {
winners.add(car.getName());
}
}
System.out.println("최종 우승자 : " + String.join(", ", winners));
}

private void isDuplicatedName(String carName) {
if (cars.stream().anyMatch(car -> car.getName().equals(carName))) {
throw new IllegalArgumentException("자동차 이름은 중복이 안됩니다.");
}
}

}
38 changes: 38 additions & 0 deletions src/main/java/racingcar/model/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package racingcar.model;

public class Car {

private final static String FORWARD_MARK = "-";
private String name;
private int forward;

private Car(String name) {
if(name.length() > 5){
throw new IllegalArgumentException("자동차 이름은 5자를 초과할 수 없습니다.");
}
this.name = name;
this.forward = 0;
}

public static Car of(String name) {
return new Car(name);
}

public String getName(){
return name;
}

public int getForward(){
return forward;
}

public String getForwardMark(){
return FORWARD_MARK.repeat(forward);
}

public void move(){
forward++;
}


}
19 changes: 19 additions & 0 deletions src/test/java/racingcar/manager/RacingManagerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package racingcar.manager;

import org.junit.jupiter.api.Test;
import racingcar.config.AppConfig;

import static org.junit.jupiter.api.Assertions.*;

class RacingManagerTest {

@Test
void racingManagerTest() {
RacingManager racingManager = new RacingManager();
racingManager.registerCars("CarA,CarB,CarC");

racingManager.race("3");

racingManager.presentWinner();
}
}