자동차 경주

2024. 10. 21. 23:57·우테코 7기/2주차

❐ Description


과제 기한 2024.10.22(화) 15:00 ~ 2024.10.28(월) 00:00
과제 진행 Branch https://github.com/Gilbert9172/java-racingcar-7
과제 제출 PR 링크 https://github.com/woowacourse-precourse/java-racingcar-7/pull/53
Git convention https://gist.github.com/stephenparish/9941e89d80e2bc58a153#file-commit-md

 

 

 

 

 

❐ Requirements


1. User

  • 경주할 자동차 이름을 입력할 수 있다.
    • 1개 이상
    • 구분은 쉼표(,)로 한다.
    • 이름은 5자 이하만 입력할 수 있다.
  • 이동 횟수를 입력할 수 있다.

 

2. System

  • 자동차에는 이름을 부여할 수 있다.
    • 이름의 길이는 5자 이하
    • 자동차는 두 가지 상태를 가진다.
    • 멈춤 / 전진
  • 무작위 값을 뽑을 수 있다.
    • 0 ~ 9 사이
    • 4이상인 경우 자동차는 전진할 수 있다.
    • 자동차 마다 매번 할당한다.
  • 실행 결과를 매번 출력해야 한다.
  • 경주가 끝나면 우승자를 알려줘야 한다.
    • 우승자는 1명 이상일 수 있다.
    • 여러명일 경우 쉼표(,)를 이용하여 구분한다.
  • 사용자가 잘못된 값을 입력할 경우 애플리케이션은 종료되어야 한다.
    • 이때 IllegalArgumentException이 발생한다.

 

 

 

 

 

❐ Exceptions


1. 자동차 이름 입력

  • CarNameNullValidator
    • 자동차 이름을 하나도 입력하지 않은 경우
    • 쉼표가 연속으로 되어 있는 경우
  • CarCountValidator
    • 자동차 이름을 1개 이하로 입력한 경우
  • CarNameLengthValidator
    • 자동차 이름이 5글자를 초과하는 경우

 

2. 시도할 횟 수 입력

  • LapCountNullValidator
    • 아무것도 입력하지 않은 경우
  • LapRegexValidator
    • 소수점있는 값을 입력하는 경우
    • 숫자 이외의 문자가 들어가는 경우
    • 문자열이 들어오는 경우
  • NumberFormatValidator
    • 0이하의 값을 입력하는 경우

 

 

 

 

 

❐ 혼자 정한 정책


  • 우승자가 없는 경우 : "우승자가 없습니다." 출력하기
  • 문자열 전처리
    • 모든 공백 제거
    • 가장 앞에 있는 0 제거 (Ex. 00100 ‣ 100)

 

 

 

 

 

❐ Domain Modeling


1. Car 

Field Type
name String
myProgress MyProgress

 

 

2. Cars 

Field Type
cars List<Car>

 

3. MovementCondition 

Field Type
distance Distance
predicate BiPredicate<Speed,Speed>

 

4. MyProgress 

Field Type
remainLap Lap
position Position

 

5. DashBoard 

Field Type
cars Cars
lapCharts LapCharts

 

6. LapChart

Field Type
summary String

 

7. LapCharts

Field Type
lapCharts List<LapChart>

 

8. Distance

Field Type
value long

 

9. Position

Field Type
value String

 

10. Lap

Field Type
value long

 

11. Race

Field Type
remainingCount Lap

 

12. Speed

Field Type
value long

 

 

 

 

 

❐ Main logic


  1. 주어진 Lap 수 만큼 while문 순회
  2. 각 자동차 마다 랜덤 값을 부여
    1. 랜덤 값이 4 이상인 경우 앞으로 한칸 이동
    2. 랜덤 값이 4 미만인 경우 제자리
  3. 랜덤 값을 사용해서 이동 방향(FOWARD/STOP) 결정
    1. 함수형 인터페이스 BiPredicate를 사용
    2. 이 로직은 MovementCondition에 속함

4. cars에서 car를 이동
5. Lap을 한 바 퀴 돌 때마다 DashBoard에 LapChart 기록

 

while (race 진행동안) {
    // 차들 이동;
    // 매 lap 결과를 DashBoard에 기록
    // 다름 lap으로 이동
}
// DashBorad 반환

 

 

 

 

 

❐ Domain & BusinessLogic


Github ReadMe에 작성. (링크)

 

 

 

 

 


'우테코 7기 > 2주차' 카테고리의 다른 글

일급 객체 ,일급 컬렉션, Value Object  (0) 2024.10.30
[Refactoring] 제어할 수 있는 코드를 작성하자!  (0) 2024.10.27
[Refactoring] 패키지가 무엇을 제공하는지 전달하자!  (0) 2024.10.27
2주차 회고  (0) 2024.10.27
'우테코 7기/2주차' 카테고리의 다른 글
  • 일급 객체 ,일급 컬렉션, Value Object
  • [Refactoring] 제어할 수 있는 코드를 작성하자!
  • [Refactoring] 패키지가 무엇을 제공하는지 전달하자!
  • 2주차 회고
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (174)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (8)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • 친절한 SQL 튜닝 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    부분단조성
    Two-Pointer
    Back-Tracking
    binarysearch
    greedy
    sliding-window
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
자동차 경주
상단으로

티스토리툴바