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

[자동차 경주] 정수아 미션 제출합니다. #738

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 자동차 경주

프로젝트에 대한 간단한 설명 또는 소개 문구를 작성합니다.

## 기능 목록

1. **입력값-자동차의 이름:**
첫 번째 입력 값인 자동차 이름에 대한 기능입니다
이름은 쉼표로 구분하며, 이름 하나당 길이는 5자 이하로 제한합니다
예외처리 - 이름의 길이가 6자 이상으로 넘어갈 경우 "[ERROR]이름의 최대 길이는 5입니다" 출력

2. **입력값-시도할 횟수:**
두번째 입력 값인 시도할 횟수입니다
자연수 값을 입력으로 받습니다
예외처리 - 0 또는 양의 정수 이외의 값을 입력하면 "[ERROR]시도할 횟수는 0 또는 양의 정수값만 가능합니다" 출력

3. **실행-전진 또는 정지:**
@woowacourse/missoion-utils의 Random API를 사용하여 0~9 사이의 랜덤한 값을 받습니다
값이 4 이상일 경우는 전진, 그 외의 경우는 정지합니다

4. **출력값-각 차수별 실행 결과:**
한 차시가 끝날 때마다 각 자동차 이름별로 실행 결과를 출력한다

5. **출력값-우승자 안내문구:**
모든 차시가 다 돌고나면 이동값을 기준으로 우승자를 출력한다
단독 우승자일 경우 "최종 우승자 : [자동차 이름]"을 출력하고
공동 우승자일 경우 "최종 우승자 : [자동차 이름1],[자동차 이름2]..."를 출력한다
49 changes: 48 additions & 1 deletion src/App.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,52 @@
const readline = require('readline');
const { Random, Console } = require('@woowacourse/mission-utils');

class App {
async play() {}
async play() {
// 입력값
Console.print('경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)');
const raceCarNames = await Console.readLineAsync();
const names = raceCarNames.split(',');

if (names.some(name => name.trim().length >= 5)) {
throw new Error("[ERROR] 이름의 최대 길이는 5입니다.");
}

Console.print('시도할 횟수는 몇 회인가요?');
const raceCnt = await Console.readLineAsync();
const raceCount = parseInt(raceCnt);

if (isNaN(raceCount) || raceCount <= 0) {
throw new Error("[ERROR] 시도할 횟수는 0 또는 양의 정수값만 가능합니다.");
}


Console.print('실행 결과');
for (let i = 0; i < raceCount; i++) {
names.forEach(name => {
const runOrStop = Random.pickNumberInRange(0, 9);
if (runOrStop >= 4) {
this.results[name] = (this.results[name] || '') + '-';
} else {
this.results[name] = this.results[name] || '';
}
});

names.forEach(name => {
Console.print(`${name} : ${this.results[name]}`);
});
Console.print();
}

const maxDashes = Math.max(...Object.values(this.results).map(value => value.length));
const winners = Object.keys(this.results).filter(name => this.results[name].length === maxDashes);

Console.print(`최종 우승자: ${winners.join(', ')}`);

}
}

export default App;

const app = new App();
app.play();