From c79e178e452b59911f0bbf0d95cf165e11c9dc00 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 13:34:11 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat=20:=20README.md=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/README.md b/README.md index b168a180..70309fde 100644 --- a/README.md +++ b/README.md @@ -1 +1,54 @@ # javascript-planetlotto-precourse + +# 최종테스트 (행성 로또) + +[]README.md에 국현할 기능 목록과 도전 목표 작성하기 +[]기능 요구사항 + +- 기능 요구사항에 기재되지 않은 내용은 스스로 판단하여 구현한다. + []프로그래밍 요구사항 + []도전과제 + +과제 제출 전 체크리스트 +[] 요구된 사항에 명시된 출력 형식을 따랐나 +[] 기능 구현을 완료한 후 아래 가이드에 따라 모든 테스트가 성공적으로 실행되는지 확인한다. +[] 테스트 성공했는지 확인 + +# 행성로또 + +## 과제 진행 요구사항 + +[] git 커밋 단위는 README.md 에 정리한 기능 목록 단위로 추가한다. - feat (feature) - fix (bug fix) - docs (documentation) - style (formatting, missing semi colons, …) - refactor - test (when adding missing tests) - chore (maintain) + +## 기능 요구사항 + +### 입력/출력 역할은 제공된 InputView, OutputView에서 수행하며 기존 메서드를 수정, 삭제할 수 없다. + +[] 에러문구는 "[ERROR]"로 시작 +[] 로또 구입금액 입력받기 +[] 구입금액에 따른 구매 장수 출력 +[] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 +[] 당첨번호 입력받기 +[] 보너스 번호 입력받기 +[] 당첨 통계 내기 +[] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 + +# 프로그래밍 요구사항 + +[] Node.js 22.19.0 버전에서 실행 가능해야 한다. +[] 프로그램 실행의 시작점은 App.js의 run()이다. +[] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다. +[] 프로그램 종료 시 process.exit()를 호출하지 않는다. +[] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다. +[] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다. +[] 기본적으로 JavaScript Style Guide를 원칙으로 한다. +[] 기본으로 제공되는 테스트가 통과해야 한다. + +# 도전과제 + +[] 리팩토링 +[] 기능확장 - 1~3주차 오픈미션 돌아보기 + +- 아쉬웠던 점은 무엇인가요? +- 다음에는 다르게 해보고 싶었던 것은 무엇인가요? +- 피드백을 받았지만 적용하지 못한 것은 무엇인가요? From fb7462a7236d9fdfab9cfd367d8c62c938bbf85b Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 14:24:44 +0900 Subject: [PATCH 2/8] =?UTF-8?q?fix=20:=20REDME.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 70309fde..3e9ee940 100644 --- a/README.md +++ b/README.md @@ -24,30 +24,30 @@ ### 입력/출력 역할은 제공된 InputView, OutputView에서 수행하며 기존 메서드를 수정, 삭제할 수 없다. -[] 에러문구는 "[ERROR]"로 시작 -[] 로또 구입금액 입력받기 -[] 구입금액에 따른 구매 장수 출력 -[] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 -[] 당첨번호 입력받기 -[] 보너스 번호 입력받기 -[] 당첨 통계 내기 -[] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 +[ ] 에러발생시 문구 발생 후 재입력 받기에러문구는 "[ERROR]"로 시작 +[ ] 로또 구입금액 입력받기 +[ ] 구입금액에 따른 구매 장수 출력 +[ ] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 +[ ] 당첨번호 입력받기 +[ ] 보너스 번호 입력받기 +[ ] 당첨 통계 내기 +[ ] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 # 프로그래밍 요구사항 -[] Node.js 22.19.0 버전에서 실행 가능해야 한다. -[] 프로그램 실행의 시작점은 App.js의 run()이다. -[] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다. -[] 프로그램 종료 시 process.exit()를 호출하지 않는다. -[] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다. -[] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다. -[] 기본적으로 JavaScript Style Guide를 원칙으로 한다. -[] 기본으로 제공되는 테스트가 통과해야 한다. +[ ] Node.js 22.19.0 버전에서 실행 가능해야 한다. +[ ] 프로그램 실행의 시작점은 App.js의 run()이다. +[ ] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다. +[ ] 프로그램 종료 시 process.exit()를 호출하지 않는다. +[ ] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다. +[ ] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다. +[ ] 기본적으로 JavaScript Style Guide를 원칙으로 한다. +[ ] 기본으로 제공되는 테스트가 통과해야 한다. # 도전과제 -[] 리팩토링 -[] 기능확장 - 1~3주차 오픈미션 돌아보기 +[ ] 리팩토링 +[ ] 기능확장 - 1~3주차 오픈미션 돌아보기 - 아쉬웠던 점은 무엇인가요? - 다음에는 다르게 해보고 싶었던 것은 무엇인가요? From 782c8fe24fb9444c5b5018bd259b1aa842d5d919 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 14:43:46 +0900 Subject: [PATCH 3/8] fix: README.md --- README.md | 61 +++++++++++++++++++++++++++++++----------------------- src/App.js | 37 ++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 3e9ee940..62da0509 100644 --- a/README.md +++ b/README.md @@ -2,52 +2,61 @@ # 최종테스트 (행성 로또) -[]README.md에 국현할 기능 목록과 도전 목표 작성하기 -[]기능 요구사항 +- [ ] README.md에 국현할 기능 목록과 도전 목표 작성하기 +- [ ]기능 요구사항 - 기능 요구사항에 기재되지 않은 내용은 스스로 판단하여 구현한다. - []프로그래밍 요구사항 - []도전과제 +- [ ] 프로그래밍 요구사항 +- [ ] 도전과제 과제 제출 전 체크리스트 -[] 요구된 사항에 명시된 출력 형식을 따랐나 -[] 기능 구현을 완료한 후 아래 가이드에 따라 모든 테스트가 성공적으로 실행되는지 확인한다. -[] 테스트 성공했는지 확인 + +- [ ] 요구된 사항에 명시된 출력 형식을 따랐나 +- [ ] 기능 구현을 완료한 후 아래 가이드에 따라 모든 테스트가 성공적으로 실행되 는지 확인한다. +- [ ] 테스트 성공했는지 확인 +- # 행성로또 ## 과제 진행 요구사항 -[] git 커밋 단위는 README.md 에 정리한 기능 목록 단위로 추가한다. - feat (feature) - fix (bug fix) - docs (documentation) - style (formatting, missing semi colons, …) - refactor - test (when adding missing tests) - chore (maintain) +- [ ] git 커밋 단위는 README.md 에 정리한 기능 목록 단위로 추가한다. +- feat (feature) +- fix (bug fix) +- docs (documentation) +- style (formatting, missing semi colons, …) +- refactor +- test (when adding missing tests) +- chore (maintain) ## 기능 요구사항 ### 입력/출력 역할은 제공된 InputView, OutputView에서 수행하며 기존 메서드를 수정, 삭제할 수 없다. -[ ] 에러발생시 문구 발생 후 재입력 받기에러문구는 "[ERROR]"로 시작 -[ ] 로또 구입금액 입력받기 -[ ] 구입금액에 따른 구매 장수 출력 -[ ] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 -[ ] 당첨번호 입력받기 -[ ] 보너스 번호 입력받기 -[ ] 당첨 통계 내기 -[ ] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 +[] 에러문구는 "[ERROR]"로 시작 +[] 로또 구입금액 입력받기 +[] 구입금액에 따른 구매 장수 출력 +[] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 +[] 당첨번호 입력받기 +[] 보너스 번호 입력받기 +[] 당첨 통계 내기 +[] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 # 프로그래밍 요구사항 -[ ] Node.js 22.19.0 버전에서 실행 가능해야 한다. -[ ] 프로그램 실행의 시작점은 App.js의 run()이다. -[ ] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다. -[ ] 프로그램 종료 시 process.exit()를 호출하지 않는다. -[ ] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다. -[ ] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다. -[ ] 기본적으로 JavaScript Style Guide를 원칙으로 한다. -[ ] 기본으로 제공되는 테스트가 통과해야 한다. +[] Node.js 22.19.0 버전에서 실행 가능해야 한다. +[] 프로그램 실행의 시작점은 App.js의 run()이다. +[] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다. +[] 프로그램 종료 시 process.exit()를 호출하지 않는다. +[] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다. +[] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다. +[] 기본적으로 JavaScript Style Guide를 원칙으로 한다. +[] 기본으로 제공되는 테스트가 통과해야 한다. # 도전과제 -[ ] 리팩토링 -[ ] 기능확장 - 1~3주차 오픈미션 돌아보기 +[] 리팩토링 +[] 기능확장 - 1~3주차 오픈미션 돌아보기 - 아쉬웠던 점은 무엇인가요? - 다음에는 다르게 해보고 싶었던 것은 무엇인가요? diff --git a/src/App.js b/src/App.js index 091aa0a5..cc3e1a21 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,40 @@ +import { Console, Random } from "@woowacourse/mission-utils"; +import { InputView, OutputView } from "./view.js"; +import { MissionUtils } from "@woowacourse/mission-utils"; + class App { - async run() {} + async run() { + // 로또 구입금액 입력받기 + const input = await InputView.askAmount(); + const ticketCount = input / 500; + + // 구입금액에 따른 구매 장수 출력 + Console.print(`${ticketCount}개를 구매했습니다.`); + // 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 + + // 당첨번호 입력받기 + // 보너스 번호 입력받기 + // 당첨 통계 내기 + // 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 + + // [8, 11, 13, 21, 22] + // [1, 3, 6, 14, 22] + + // 당첨 번호를 입력해 주세요. + // 1, 2, 3, 4, 5 + + // 보너스 번호 번호를 입력해 주세요. + // 6 + + // 당첨 통계 + // --- + // 5개 일치 (100,000,000원) - 0개 + // 4개 일치, 보너스 번호 일치 (10,000,000원) - 0개 + // 4개 일치 (1,500,000원) - 0개 + // 3개 일치, 보너스 번호 일치 (500,000원) - 0개 + // 2개 일치, 보너스 번호 일치 (5,000원) - 1개 + // 0개 일치 (0원) - 1개 + } } export default App; From 055cbc3f50f488f15482eccdf2d0049722671774 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 14:32:26 +0900 Subject: [PATCH 4/8] =?UTF-8?q?fix=20:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/App.js b/src/App.js index cc3e1a21..2b39305b 100644 --- a/src/App.js +++ b/src/App.js @@ -1,19 +1,35 @@ import { Console, Random } from "@woowacourse/mission-utils"; import { InputView, OutputView } from "./view.js"; import { MissionUtils } from "@woowacourse/mission-utils"; - +import Lotto from "./lotto.js"; class App { async run() { // 로또 구입금액 입력받기 const input = await InputView.askAmount(); const ticketCount = input / 500; - // 구입금액에 따른 구매 장수 출력 - Console.print(`${ticketCount}개를 구매했습니다.`); // 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력 + let myLottoTicketList = []; + for (let i = 0; i < ticketCount; i++) { + let numbers = Lotto.getLottoNumber(); + myLottoTicketList.push(numbers); + } + + // 구입금액에 따른 구매 장수 출력 + const outPut = OutputView.printPurchasedLottos(myLottoTicketList); + // Console.print(`${ticketCount}개를 구매했습니다.`); // 당첨번호 입력받기 + const lastWinNumber = await InputView.askWinningLotto(); + //당첨번호 출력하기 + // Console.print(lastWinNumber); + Console.print(); + // 보너스 번호 입력받기 + const lastBonusNumber = await InputView.askBonusNumber(); + //당첨번호 출력하기 + // Console.print(lastBonusNumber); + // 당첨 통계 내기 // 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 @@ -25,15 +41,6 @@ class App { // 보너스 번호 번호를 입력해 주세요. // 6 - - // 당첨 통계 - // --- - // 5개 일치 (100,000,000원) - 0개 - // 4개 일치, 보너스 번호 일치 (10,000,000원) - 0개 - // 4개 일치 (1,500,000원) - 0개 - // 3개 일치, 보너스 번호 일치 (500,000원) - 0개 - // 2개 일치, 보너스 번호 일치 (5,000원) - 1개 - // 0개 일치 (0원) - 1개 } } From 473bc4c9d277c15860fa321fe7fa6dbeba7be070 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 15:13:02 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat=20:=20=EB=BD=91=EC=9D=80=20=EB=A1=9C?= =?UTF-8?q?=EB=98=90=20=EB=B2=88=ED=98=B8=20=EB=9E=9C=EB=8D=A4=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lotto.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/lotto.js diff --git a/src/lotto.js b/src/lotto.js new file mode 100644 index 00000000..d632572d --- /dev/null +++ b/src/lotto.js @@ -0,0 +1,9 @@ +import { Console, Random } from "@woowacourse/mission-utils"; + +class Lotto { + static getLottoNumber() { + return Random.pickUniqueNumbersInRange(1, 30, 5).sort(); + } +} + +export default Lotto; From ef74555543ec2f664b7cc8abf8be76a9b87f8326 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 15:14:45 +0900 Subject: [PATCH 6/8] =?UTF-8?q?fix=20:=20=EB=BD=91=EC=9D=80=20=EB=A1=9C?= =?UTF-8?q?=EB=98=90=20=EB=B2=88=ED=98=B8=20=EC=98=A4=EB=A6=84=EC=B0=A8?= =?UTF-8?q?=EC=88=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lotto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lotto.js b/src/lotto.js index d632572d..e7782e00 100644 --- a/src/lotto.js +++ b/src/lotto.js @@ -2,7 +2,7 @@ import { Console, Random } from "@woowacourse/mission-utils"; class Lotto { static getLottoNumber() { - return Random.pickUniqueNumbersInRange(1, 30, 5).sort(); + return Random.pickUniqueNumbersInRange(1, 30, 5).sort((a, b) => a - b); } } From c04e06384da8f9f61b089ae1d2e6e8a5a86c9347 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 16:41:09 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat=20:=20=EB=8B=B9=EC=B2=A8=EB=B2=88?= =?UTF-8?q?=ED=98=B8=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=8B=B9=EC=B2=A8?= =?UTF-8?q?=EA=B0=AF=EC=88=98=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 72 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/src/App.js b/src/App.js index 2b39305b..9cd849d9 100644 --- a/src/App.js +++ b/src/App.js @@ -14,33 +14,87 @@ class App { let numbers = Lotto.getLottoNumber(); myLottoTicketList.push(numbers); } - + // OutputView.printBlank(); // 구입금액에 따른 구매 장수 출력 + const outPut = OutputView.printPurchasedLottos(myLottoTicketList); - // Console.print(`${ticketCount}개를 구매했습니다.`); - // 당첨번호 입력받기 + // 지난주 당첨번호 입력받기 const lastWinNumber = await InputView.askWinningLotto(); + //당첨번호 출력하기 // Console.print(lastWinNumber); - Console.print(); + // console.log("지난주 당첨번호 -> ", lastWinNumber); // 보너스 번호 입력받기 const lastBonusNumber = await InputView.askBonusNumber(); - //당첨번호 출력하기 - // Console.print(lastBonusNumber); - // 당첨 통계 내기 + // const 당첨된거확인하기위한함수 = getLastWinNumber( + // lastWinNumber, + // lastBonusNumber + // ); + + console.log("myLottoTicketList-> ", myLottoTicketList); // 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 - // [8, 11, 13, 21, 22] - // [1, 3, 6, 14, 22] + let results = { + 5: 0, + "4+b": 0, + 4: 0, + "3+b": 0, + "2+b": 0, + 0: 0, + }; + + // let results = { + // 1: 0, + // 2: 0, + // 3: 0, + // 4: 0, + // 5: 0, + // 0: 0, + // }; + + for (let i = 0; i < myLottoTicketList.length; i++) { + const myLotto = myLottoTicketList[i]; + // console.log(lotto); + // console.log(typeof lotto); + const correctType = Lotto.getCorrectType( + lastWinNumber, + lastBonusNumber, + myLotto + ); + console.log("myLotto->", myLotto[0]); + if (!correctType) { + continue; + } + results[correctType]++; + } + + console.log(results); + + const r0 = results["5"]; + const r1 = results["4+b"]; + + const r2 = results["4"]; + const r3 = results["3+b"]; + + const r4 = results["2+b"]; + const r5 = results["0"]; + + console.log("-------------->>>>>>>>", results); + console.log("여기보세요 ", r0, r1, r2, r3, r4, r5); + const Map = { 1: r0, 2: r1, 3: r2, 4: r3, 5: r4, 0: r5 }; // 당첨 번호를 입력해 주세요. // 1, 2, 3, 4, 5 // 보너스 번호 번호를 입력해 주세요. // 6 + // countsByRank = results; + // countsByRank = {}; + const costOutput = OutputView.printResult(Map); + console.log("costOutput ---> ", costOutput); } } From fac7be68fc1048041aa0b1fc17b84a69381ca386 Mon Sep 17 00:00:00 2001 From: Taenggu99 Date: Sat, 10 Jan 2026 16:57:44 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EB=A7=88=EC=A7=80=EB=A7=89=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ src/App.js | 12 ++++----- src/lotto.js | 67 ++++++++++++++++++++++++++++++++++++++++++++++++- src/sadas | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/view.js | 55 ++++++++++++++++++++++++++++++---------- 5 files changed, 187 insertions(+), 20 deletions(-) create mode 100644 src/sadas diff --git a/README.md b/README.md index 62da0509..7e5afe2f 100644 --- a/README.md +++ b/README.md @@ -61,3 +61,5 @@ - 아쉬웠던 점은 무엇인가요? - 다음에는 다르게 해보고 싶었던 것은 무엇인가요? - 피드백을 받았지만 적용하지 못한 것은 무엇인가요? + +// 예외테스트는 신경안써도됨 diff --git a/src/App.js b/src/App.js index 9cd849d9..9a0e63fe 100644 --- a/src/App.js +++ b/src/App.js @@ -34,7 +34,7 @@ class App { // lastBonusNumber // ); - console.log("myLottoTicketList-> ", myLottoTicketList); + // console.log("myLottoTicketList-> ", myLottoTicketList); // 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기 let results = { @@ -71,7 +71,7 @@ class App { results[correctType]++; } - console.log(results); + // console.log(results); const r0 = results["5"]; const r1 = results["4+b"]; @@ -82,8 +82,8 @@ class App { const r4 = results["2+b"]; const r5 = results["0"]; - console.log("-------------->>>>>>>>", results); - console.log("여기보세요 ", r0, r1, r2, r3, r4, r5); + // console.log("-------------->>>>>>>>", results); + // console.log("여기보세요 ", r0, r1, r2, r3, r4, r5); const Map = { 1: r0, 2: r1, 3: r2, 4: r3, 5: r4, 0: r5 }; // 당첨 번호를 입력해 주세요. @@ -93,8 +93,8 @@ class App { // 6 // countsByRank = results; // countsByRank = {}; - const costOutput = OutputView.printResult(Map); - console.log("costOutput ---> ", costOutput); + OutputView.printResult(results); + // console.log("costOutput ---> ", costOutput); } } diff --git a/src/lotto.js b/src/lotto.js index e7782e00..9d5e02fd 100644 --- a/src/lotto.js +++ b/src/lotto.js @@ -4,6 +4,71 @@ class Lotto { static getLottoNumber() { return Random.pickUniqueNumbersInRange(1, 30, 5).sort((a, b) => a - b); } -} + // 보너스 숫자 검사 + // static checkBonusNumber() {} + + // static getLastWinNumber(lastWinNumber, lastBonusNumber, myLottoTicketList) { + // const lastWinNumber = lastWinNumber; + // const lastBonusNumber = lastBonusNumber; + // return lastWinNumber, lastBonusNumber; + // } + static getCorrectType(lastWinNumber, lastBonusNumber, myLotto) { + let correctCount = 0; + console.log("이거 myLotto-> ", myLotto); + console.log("이거 lastWinNumber ", lastWinNumber); + console.log("이거 lastBonusNumber ", lastBonusNumber); + + for (let i = 0; i < myLotto.length; i++) { + // if (lastWinNumber.filter((value) => myLotto.includes(value))) { + // correctCount++; + + // } + let correctNumberList = lastWinNumber.filter((value) => + myLotto.includes(value) + ); + correctCount = correctNumberList.length; + console.log("correct--->", correctCount); + } + // if (correctCount === 5) { + // return 5; + // } + // if (correctCount === 4 && myLotto.includes(lastBonusNumber)) { + // return ; + // } + // if (correctCount === 4) { + // return 3; + // } + // if (correctCount === 3 && myLotto.includes(lastBonusNumber)) { + // return 4; + // } + // if (correctCount === 2 && myLotto.includes(lastBonusNumber)) { + // return 5; + // } + // if ((correctCount = 0)) { + // return 0; + // } + + if (correctCount === 5) { + return 5; + } + if (correctCount === 4 && myLotto.includes(lastBonusNumber)) { + return "4+b"; + } + if (correctCount === 4) { + return 4; + } + if (correctCount === 3 && myLotto.includes(lastBonusNumber)) { + return "3+b"; + } + if (correctCount === 2 && myLotto.includes(lastBonusNumber)) { + return "2+b"; + } + + if ((correctCount = 0)) { + return 0; + } + return correctCount; // 몇개 당첨됐는지? + } +} export default Lotto; diff --git a/src/sadas b/src/sadas new file mode 100644 index 00000000..ee84c044 --- /dev/null +++ b/src/sadas @@ -0,0 +1,71 @@ +; import { Console, Random } from "@woowacourse/mission-utils"; + +; class Lotto { +; #numbers; + +; constructor(numbers) { +; this.#validate(numbers); +; this.#numbers = numbers; +; } + +; #validate(numbers) { +; if (numbers.length !== 6) { +; throw new Error("[ERROR] 로또 번호는 6개여야 합니다."); +; } + +; const correctSet = new Set(numbers); +; // console.log(correctSet); +; if (correctSet.size !== 6) { +; throw new Error("[ERROR] 중복되는 값이 있습니다."); +; } +; } + +; getNumbers() { +; return this.#numbers; +; } + +; getCorrectType(correctNumbers, bonusNumber) { +; let correctCount = 0; +; for (let i = 0; i < this.#numbers.length; i++) { +; if (correctNumbers.includes(this.#numbers[i])) { +; correctCount++; +; } +; } + +; if (correctCount < 3) { +; return false; +; } + +; if (correctCount === 5 && this.#numbers.includes(bonusNumber)) { +; return "5+b"; +; } +; return correctCount; // 몇개 당첨됐는지? +; } + +; static() { +; return Random.pickUniqueNumbersInRange(1, 45, 6).sort((a, b) => a - b); +; } + +; // 3개 일치 (5,000원) - 1개 +; // 4개 일치 (50,000원) - 0개 +; // 5개 일치 (1,500,000원) - 0개 +; // 5개 일치, 보너스 볼 일치 (30,000,000원) - 0개 +; // 6개 일치 (2,000,000,000원) - 0개 +; // 총 수익률은 62.5%입니다. + +; validateNumbers() { +; //TODO 입력 된 값들이 문자인지 검증 +; const arr = this.#numbers; +; for (let n of arr) { +; if (Number.isNaN(Number(n))) { +; throw new Error( +; "[ERROR] 로또 번호는 숫자로 이루어져야 합니다. 아직 문자입니다." +; ); +; continue; +; } +; } +; } +; // TODO: 추가 기능 구현 +; } + +; export default Lotto; diff --git a/src/view.js b/src/view.js index ae6afd9c..24d903e3 100644 --- a/src/view.js +++ b/src/view.js @@ -5,10 +5,12 @@ const InputView = { * @returns {number} */ async askAmount() { - const input = await MissionUtils.Console.readLineAsync('구입금액을 입력해 주세요.\n'); + const input = await MissionUtils.Console.readLineAsync( + "구입금액을 입력해 주세요.\n" + ); const num = parseInt(input, 10); if (Number.isNaN(num)) { - throw new Error('구매금액은 숫자여야 합니다.'); + throw new Error("구매금액은 숫자여야 합니다."); } return num; }, @@ -17,15 +19,17 @@ const InputView = { * @returns {number[]} */ async askWinningLotto() { - const input = await MissionUtils.Console.readLineAsync('지난 주 당첨 번호를 입력해 주세요.\n'); + const input = await MissionUtils.Console.readLineAsync( + "지난 주 당첨 번호를 입력해 주세요.\n" + ); return input - .replaceAll(' ', '') - .split(',') + .replaceAll(" ", "") + .split(",") .map((s) => { const n = parseInt(s, 10); if (Number.isNaN(n)) { - throw new Error('당첨 번호는 숫자여야 합니다.'); + throw new Error("당첨 번호는 숫자여야 합니다."); } return n; }); @@ -35,10 +39,12 @@ const InputView = { * @returns {number} */ async askBonusNumber() { - const input = await MissionUtils.Console.readLineAsync('보너스 번호를 입력해 주세요.\n'); + const input = await MissionUtils.Console.readLineAsync( + "보너스 번호를 입력해 주세요.\n" + ); const num = parseInt(input, 10); if (Number.isNaN(num)) { - throw new Error('보너스 번호는 숫자여야 합니다.'); + throw new Error("보너스 번호는 숫자여야 합니다."); } return num; }, @@ -51,9 +57,9 @@ const OutputView = { printPurchasedLottos(lottos) { const lines = [ `${lottos.length}개를 구매했습니다.`, - ...lottos.map(lotto => `[${lotto.join(', ')}]`), + ...lottos.map((lotto) => `[${lotto.join(", ")}]`), ]; - MissionUtils.Console.print(lines.join('\n')); + MissionUtils.Console.print(lines.join("\n")); }, /** @@ -65,26 +71,49 @@ const OutputView = { printResult(countsByRank) { const getCount = (k) => countsByRank.get(k) ?? 0; + console.log(); const output = [ - '당첨 통계', - '---', + "당첨 통계", + "---", `5개 일치 (100,000,000원) - ${getCount(1)}개`, `4개 일치, 보너스 번호 일치 (10,000,000원) - ${getCount(2)}개`, `4개 일치 (1,500,000원) - ${getCount(3)}개`, `3개 일치, 보너스 번호 일치 (500,000원) - ${getCount(4)}개`, `2개 일치, 보너스 번호 일치 (5,000원) - ${getCount(5)}개`, `0개 일치 (0원) - ${getCount(0)}개`, - ].join('\n'); + ].join("\n"); MissionUtils.Console.print(output); }, + // printResult(countsByRank) { + // // const getCount = (k) => countsByRank.get(k) ?? 0; + + // console.log("countsByRank", countsByRank); + // const output = [ + // "당첨 통계", + // "---", + // `5개 일치 (100,000,000원) - ${countsByRank["5"]}개`, + // `4개 일치, 보너스 번호 일치 (10,000,000원) - ${countsByRank["4+b"]}개`, + // `4개 일치 (1,500,000원) - ${countsByRank["4"]}개`, + // `3개 일치, 보너스 번호 일치 (500,000원) - ${countsByRank["3+b"]}개`, + // `2개 일치, 보너스 번호 일치 (5,000원) - ${countsByRank["2+b"]}개`, + // `0개 일치 (0원) - ${countsByRank["0"]}개`, + // ].join("\n"); + + // MissionUtils.Console.print(output); + // }, + /** * @param {string} message */ printErrorMessage(message) { MissionUtils.Console.print(`[ERROR] ${message}`); }, + + // printBlank() { + // return Console.print("\n"); + // }, }; export { InputView, OutputView };