Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f6f1031
Car.java 생성
chaehyunL Mar 15, 2026
b1a681f
Car 함수 생성
chaehyunL Mar 15, 2026
8e00e8b
Docs:README.md 파일 작성
chaehyunL Mar 17, 2026
eac5f28
style: Java Style Guide 적용.
chaehyunL Mar 18, 2026
fbdc7d4
refactor:랜덤 메서드 수정.
chaehyunL Mar 18, 2026
0cfd671
refactor:매직 넘버 이용해서 숫자 정의.
chaehyunL Mar 18, 2026
cb9d863
feat: Car 객체 구현
chaehyunL Mar 21, 2026
334e04e
feat: 랜덤숫자 반환하는 RandomNumberGenerator 객체 구현
chaehyunL Mar 21, 2026
5a92c39
test: Car 이름/정지/전진 test 생성
chaehyunL Mar 21, 2026
00403ef
feat:RaceResult 객체 생성
chaehyunL Mar 21, 2026
995a22a
feat: RaceResult 생성
chaehyunL Mar 22, 2026
0bb6aa2
test:RaceResult 테스트 생성
chaehyunL Mar 22, 2026
9fec1fd
style: 자바 가이드 스타일로 변경
chaehyunL Mar 22, 2026
835c3de
style: 자바 가이드 스타일로 변경
chaehyunL Mar 22, 2026
2e61453
style:아래 공백 생성(마지막 공백)
chaehyunL Mar 22, 2026
8456752
feat:게임 실행,추가
chaehyunL Mar 22, 2026
a72b3bd
feat:feat: 프로그램 실행을 위한 Main 클래스 구현
chaehyunL Mar 22, 2026
4e2af0c
style:자바 스타일 가이드로 변경
chaehyunL Mar 22, 2026
0904207
docs:README 작성
chaehyunL Mar 22, 2026
6c7b1c3
docs:README 작성
chaehyunL Mar 22, 2026
e32d01a
refector:MVC 형식으로 main 리펙터링.
chaehyunL Mar 22, 2026
965e18d
style: 자바 스타일 가이드로 변경
chaehyunL Mar 22, 2026
f04e6c9
feat: controller 생성
chaehyunL Mar 22, 2026
fca3898
feat: inputView 생성
chaehyunL Mar 22, 2026
57c4881
feat: OutputView 생성
chaehyunL Mar 22, 2026
8b6530c
Merge branch 'main' into chaehyunL2
chaehyunL Mar 25, 2026
848a345
[그리디]이채현 자동차 경주 미션 3,4단계 제출합니다.
chaehyunL Mar 25, 2026
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
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 자동차 경주 1,2단계 구현

## Car 객체 생성
자동차 이름, 자동차의 위치=0 을 기본으로 설정.

0-9까지의 정수 값을 입력받음.
- 4이상일 경우, 전진
- 4미만일 경우, 그대로 유지.

## GetWinners 기능 구현
N회를 반복한 이후, 여러개의 자동차들 중, 우승 자동차들을 구함.
- far값에 자동차들 중 가장 멀리 간 position 정수를 구함.
- 가장 멀리 간 값들과 일치하는 자동차들의 이름을 구함
- "@@,@@,@@가 최종 우승했습니다."형식으로 출력.



37 changes: 37 additions & 0 deletions src/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 자동차 경주

## 자동차 경주 미션
자동차의 이름과 횟수를 입력받고, 우승자를 출력하는 게임.

## 기능 구현
### 1. Car 객체 구현
자동차의 이름, 위치, 움직임.
자동차 이름을 할당받고, 위치를 0으로 기본 설정하고,
이동 역치를 설정하여 전진 혹은 정지를 구현함.
### 2. 우승 자동차
할당받은 N개의 자동차 중에서 우승자를 반환하는 RaceResult를 구현하였음.

### 3. 메인
,(쉼표)를 기준으로 자동차 이름을 입력받고,
시도할 횟수(N회)를 정함.

그 이후 게임을 실행하여 진행 상황을 N번 출력

우승자들을 모두 출력함.

___

## 테스트 코드

### Car 객체 test
Car 객체에서 가장 중요하다고 생각되었던 부분은, 이름을 제대로 부여받는지,
정지와 전진이 제대로 수행되는지 입니다.

그래서 이름과, 정지,전진을 구현하였습니다.
### RaceResult test
Car list를 반환하되, 모두 반환이 제대로 되는지 알아보고 싶어서,

[case 1: 1개만 반환될때], [case 2: 여러개가 반환될때]

2가지 case로 구분하여 test 하였습니다.

28 changes: 28 additions & 0 deletions src/main/java/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import java.util.Random;

public class Car {
String name;
private int position = 0;
private static final int FORWARD_THRESHOLD = 4;

public Car(String newName) {
this.name = newName;
}

RandomNumberGenerator rng = new RandomNumberGenerator();
int randomNumber = rng.generate();

public void move(int randomNumber) {
if (randomNumber >= FORWARD_THRESHOLD) {
position++;
}
}

public String getName() {
return this.name;
}

public int getPosition() {
return this.position;
}
}
24 changes: 24 additions & 0 deletions src/main/java/Car/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package Car;

import java.util.Random;

public class Car {
String name;
int position;

public Car(String name) {
this.name = name;
this.position = 0;
}

Random random = new Random();
private static final int FORWARD_THRESHOLD = 4;

public void move() {

int roll = random.nextInt(10);
if (roll >= FORWARD_THRESHOLD) {
position++;
}
}
}
19 changes: 19 additions & 0 deletions src/main/java/Controller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import java.util.ArrayList;
import java.util.List;

public class Controller {
public void run() {
String input = InputView.getCarNames();
String[] carNames = input.split(",");
int number = InputView.getTrynumber();

List<Car> cars = new ArrayList<>();
for (String name : carNames) {
cars.add(new Car(name.trim()));
}
OutputView.getOutput();

RacingGame racingGame = new RacingGame(cars, number);
racingGame.playGame();
}
}
20 changes: 20 additions & 0 deletions src/main/java/GetWinners.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import java.util.*;

public class GetWinners {
public static void getWinner(List<Car> cars) {
int far=0;
for(Car car:cars){
if(car.position>far){
far=car.position;
}
}
List<String> winners=new ArrayList<>();
for (Car car:cars){
if(car.position==far){
winners.add(car.name);
}
}
String finalWinners=String.join(", ",winners);
System.out.println(finalWinners+"가 최종 우승했습니다.");
}
}
17 changes: 17 additions & 0 deletions src/main/java/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import java.util.Scanner;

public class InputView {
public static String getCarNames() {
Scanner scanner = new Scanner(System.in);
System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).");
String value = scanner.nextLine();
return value;
}

public static int getTrynumber() {
Scanner scanner = new Scanner(System.in);
System.out.println("시도할 횟수는 몇회인가요?");
int number = scanner.nextInt();
return number;
}
}
7 changes: 7 additions & 0 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import java.util.*;

public class Main {
public static void main(String[] args) {

}
}
5 changes: 5 additions & 0 deletions src/main/java/OutputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
public class OutputView {
public static void getOutput() {
System.out.println("실행 결과");
}
}
20 changes: 20 additions & 0 deletions src/main/java/RaceResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import java.util.ArrayList;
import java.util.List;

public class RaceResult {
private final List<Car> cars;

public RaceResult(List<Car> newCars) {
this.cars = new ArrayList<>(newCars);
}

public List<Car> getResult() {
List<Car> resultCars = new ArrayList<>();
int maxPosition = cars.stream()
.mapToInt(Car::getPosition).max()
.orElse(0);
resultCars = cars.stream().filter(car -> car.getPosition() == maxPosition)
.toList();
return resultCars;
}
}
45 changes: 45 additions & 0 deletions src/main/java/RacingGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class RacingGame {
List<Car> cars = new ArrayList<>();
int count;

public RacingGame(List<Car> newCars, int newcount) {
this.cars = newCars;
this.count = newcount;
}

RandomNumberGenerator randomNumberGenerator = new RandomNumberGenerator();

private void moveCars() {
for (Car car : cars) {
car.move(randomNumberGenerator.generate());
}
}

private void showRace() {
for (Car car : cars) {
String dash = "-".repeat(car.getPosition());
System.out.println(car.getName() + ": " + dash);
}
System.out.println(" ");
}

private void showResult() {
RaceResult raceResult = new RaceResult(cars);
List<Car> winners = raceResult.getResult();
String winnerNames = winners.stream().map(Car::getName).collect(Collectors.joining(", "));
System.out.printf(winnerNames + "가 최종 우승했습니다.");
}

public void playGame() {
for (int i = 0; i < count; i++) {
moveCars();
showRace();
}
showResult();
}
}
9 changes: 9 additions & 0 deletions src/main/java/RandomNumberGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import java.util.Random;

public class RandomNumberGenerator {
Random random = new Random();

public int generate() {
return random.nextInt(10);
}
}
11 changes: 11 additions & 0 deletions src/main/java/main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class main {
public static void main(String[] args) {
Controller controller = new Controller();
controller.run();
}
}

30 changes: 30 additions & 0 deletions src/test/java/CarTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;


public class CarTest {
@Test
@DisplayName("Car 객체, 이름 반환 test")
public void Test_getName() {
Car car = new Car("A");
Assertions.assertEquals("A", car.getName());
}

@Test
@DisplayName("정지 test[0-3]")
public void Test_underForwardThreshold() {
Car car = new Car("A");
car.move(3);
Assertions.assertEquals(0, car.getPosition());
}

@Test
@DisplayName("전진 test[4-9]")
public void Test_overForwardThreshold() {
Car car = new Car("A");
car.move(4);
Assertions.assertEquals(1, car.getPosition());
}
}
37 changes: 37 additions & 0 deletions src/test/java/RaceResultTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

public class RaceResultTest {
@Test
@DisplayName("우승자 1명인 경우 올바르게 추출")
public void Test_singlewinner() {
Car car1 = new Car("A");
car1.move(4);
Car car2 = new Car("B");
car2.move(0);
RaceResult raceResult = new RaceResult(List.of(car1, car2));
List<Car> winners = raceResult.getResult();
assertThat(winners).hasSize(1);
assertThat(winners.get(0).getName()).isEqualTo("A");
}

@Test
@DisplayName("공동우승자 추출")
public void Test_multiwinners() {
Car car1 = new Car("A");
car1.move(4);
Car car2 = new Car("B");
car2.move(4);

RaceResult raceResult = new RaceResult(List.of(car1, car2));
List<Car> winners = raceResult.getResult();

assertThat(winners).hasSize(2);
assertThat(winners).extracting(Car::getName).containsExactlyInAnyOrder("A", "B");
}
}