From d58fb60047e65d6bcb7f2e069f3a67405b2863b5 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 13:24:09 +0900 Subject: [PATCH 01/12] docs(readme): add feature list section --- README.md | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b168a180..5d2c62e6 100644 --- a/README.md +++ b/README.md @@ -1 +1,137 @@ -# javascript-planetlotto-precourse +# ๐Ÿช javascript-planetlotto-precourse +์šฐํ…Œ์ฝ” ๋กœ๋˜ ๋ฐœ๋งค๊ธฐ์ธ ํ–‰์„ฑ ๋กœ๋˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. + +--- +## ๐Ÿ“ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋ชฉ๋ก + +### 1. ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [] `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ + + - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) + - [์˜ˆ์™ธ] ์†Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ์Œ์ˆ˜ ๋˜๋Š” 0์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] 500์›์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ์ž…๋ ฅ๊ฐ’์ด 500์› ๋‹จ์œ„์ผ ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”๊ฐ€? +> - [] ๊ตฌ์ž…๊ธˆ์•ก์ด 500์› ๋‹จ์œ„๊ฐ€ ์•„๋‹ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์Œ์ˆ˜ ๋˜๋Š” 0 ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +
+ +### 2. ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ์ถœ๋ ฅํ•˜๊ธฐ +- [] ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๊ตฌํ•˜๊ธฐ (๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก / 500) +- [] `2๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.` ์ถœ๋ ฅ +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ๊ตฌ์ž…๊ธˆ์•ก์— ๋”ฐ๋ผ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ณ„์‚ฐ๋œ๋‹ค. +
+ +### 3. ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ถœ๋ ฅํ•˜๊ธฐ +- [] ๋กœ๋˜ ๋ฐœํ–‰ํ•˜๊ธฐ + + - ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž ๋ฝ‘๊ธฐ (Random ๊ฐ’ ์ถ”์ถœ์€ย `Random. pickUniqueNumbersInRange()` ํ™œ์šฉ) + - ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ + - ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰๋งŒํผ ๋ฐ˜๋ณต +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ํ•œ ์žฅ์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ 5๊ฐœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +> - [] 5๊ฐœ์˜ ๋ฒˆํ˜ธ ์ค‘ ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [] 5๊ฐœ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [] ๋ชจ๋“  ์ˆซ์ž๊ฐ€ 1~30 ๋ฒ”์œ„์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +> - [] ๋ฐœํ–‰๋œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ๊ตฌ์ž… ์ˆ˜๋Ÿ‰๊ณผ ์ผ์น˜ํ•˜๋Š”๊ฐ€? +
+ +### 4. ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [] `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [] ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆํ˜ธ ๊ตฌ๋ถ„ํ•˜๊ธฐ +- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ + + - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] 1 ~ 30 ๋ฒ”์œ„์˜ ์ •์ˆ˜๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] 5๊ฐœ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ๋ฌธ์ž, ๊ธฐํ˜ธ, ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (*์‰ผํ‘œ ์ œ์™ธ) +> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์ค‘๋ณต๋œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 5๊ฐœ๊ฐ€ ์•„๋‹ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +
+ +### 5. ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [] `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ + + - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) + - [์˜ˆ์™ธ] ์†Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] 1 ~ 30 ๋ฒ”์œ„์˜ ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ + - [์˜ˆ์™ธ] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋  ๊ฒฝ์šฐ +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ์œ ํšจํ•œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +
+ +### 6. ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ +- [] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ +- [] ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ +
+ +> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก +> - [] ๊ฐ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ผ์น˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•œ๋‹ค. +> - [] 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 1๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ํฌํ•จ ์‹œ 2๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 3๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [] 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 4๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [] 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์‹œ ์‹œ 5๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [] ์ผ์น˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํ†ต๊ณ„ ๊ฐ์ฒด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐฑ์‹ ๋œ๋‹ค. +
+ +### 7. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ์žฌ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ +- [] ํ•ด๋‹น ์ž…๋ ฅ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›๊ธฐ +
+ +--- +## ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ +๋ณธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ์ ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋ฆฌ์ฝ”์Šค์—์„œ ํ•™์Šตํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹(๋ฌธ์ œ ๋ถ„ํ•ด, ์„ค๊ณ„, TDD)์ด ์ฝ”๋“œ์— ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์— ์žˆ๋‹ค. + +- [] ์ž…๋ ฅ/์ถœ๋ ฅ ์—ญํ• ์€ ์ œ๊ณต๋œ InputView, OutputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. + +- [] ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~30๊นŒ์ง€์ด๋‹ค. +- [] 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 5๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [] ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. +- [] 1๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 100,000,000์› +- [] 2๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 10,000,000์› +- [] 3๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› +- [] 4๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 500,000์› +- [] 5๋“ฑ: 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› +- [] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. +- [] ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 500์›์ด๋‹ค. +- [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. +- [] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. +- [] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. \ No newline at end of file From 264f6c67f9e7c5a7340cc2d549244abfadb24d79 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 13:27:32 +0900 Subject: [PATCH 02/12] docs(readme): modify Markdown syntax --- README.md | 126 +++++++++++++++++++++++++++--------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 5d2c62e6..1e739e0b 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ ## ๐Ÿ“ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋ชฉ๋ก ### 1. ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [] `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [ ] `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) @@ -17,26 +17,26 @@
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ์ž…๋ ฅ๊ฐ’์ด 500์› ๋‹จ์œ„์ผ ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”๊ฐ€? -> - [] ๊ตฌ์ž…๊ธˆ์•ก์ด 500์› ๋‹จ์œ„๊ฐ€ ์•„๋‹ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์Œ์ˆ˜ ๋˜๋Š” 0 ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ž…๋ ฅ๊ฐ’์ด 500์› ๋‹จ์œ„์ผ ๋•Œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”๊ฐ€? +> - [ ] ๊ตฌ์ž…๊ธˆ์•ก์ด 500์› ๋‹จ์œ„๊ฐ€ ์•„๋‹ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์Œ์ˆ˜ ๋˜๋Š” 0 ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
### 2. ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ์ถœ๋ ฅํ•˜๊ธฐ -- [] ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๊ตฌํ•˜๊ธฐ (๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก / 500) -- [] `2๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.` ์ถœ๋ ฅ +- [ ] ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๊ตฌํ•˜๊ธฐ (๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก / 500) +- [ ] `2๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.` ์ถœ๋ ฅ
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ๊ตฌ์ž…๊ธˆ์•ก์— ๋”ฐ๋ผ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] ๊ตฌ์ž…๊ธˆ์•ก์— ๋”ฐ๋ผ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ณ„์‚ฐ๋œ๋‹ค.
### 3. ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ถœ๋ ฅํ•˜๊ธฐ -- [] ๋กœ๋˜ ๋ฐœํ–‰ํ•˜๊ธฐ +- [ ] ๋กœ๋˜ ๋ฐœํ–‰ํ•˜๊ธฐ - ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž ๋ฝ‘๊ธฐ (Random ๊ฐ’ ์ถ”์ถœ์€ย `Random. pickUniqueNumbersInRange()` ํ™œ์šฉ) - ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ @@ -44,17 +44,17 @@
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ํ•œ ์žฅ์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ 5๊ฐœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. -> - [] 5๊ฐœ์˜ ๋ฒˆํ˜ธ ์ค‘ ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -> - [] 5๊ฐœ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -> - [] ๋ชจ๋“  ์ˆซ์ž๊ฐ€ 1~30 ๋ฒ”์œ„์ธ์ง€ ํ™•์ธํ•œ๋‹ค. -> - [] ๋ฐœํ–‰๋œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ๊ตฌ์ž… ์ˆ˜๋Ÿ‰๊ณผ ์ผ์น˜ํ•˜๋Š”๊ฐ€? +> - [ ] ํ•œ ์žฅ์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ 5๊ฐœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +> - [ ] 5๊ฐœ์˜ ๋ฒˆํ˜ธ ์ค‘ ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [ ] 5๊ฐœ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [ ] ๋ชจ๋“  ์ˆซ์ž๊ฐ€ 1~30 ๋ฒ”์œ„์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +> - [ ] ๋ฐœํ–‰๋œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰์ด ๊ตฌ์ž… ์ˆ˜๋Ÿ‰๊ณผ ์ผ์น˜ํ•˜๋Š”๊ฐ€?
### 4. ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [] `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [] ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆํ˜ธ ๊ตฌ๋ถ„ํ•˜๊ธฐ -- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [ ] `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [ ] ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆํ˜ธ ๊ตฌ๋ถ„ํ•˜๊ธฐ +- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ @@ -64,17 +64,17 @@
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ๋ฌธ์ž, ๊ธฐํ˜ธ, ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (*์‰ผํ‘œ ์ œ์™ธ) -> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์ค‘๋ณต๋œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 5๊ฐœ๊ฐ€ ์•„๋‹ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ๋ฌธ์ž, ๊ธฐํ˜ธ, ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (*์‰ผํ‘œ ์ œ์™ธ) +> - [ ] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ค‘๋ณต๋œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 5๊ฐœ๊ฐ€ ์•„๋‹ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
### 5. ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [] `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [ ] `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) @@ -86,52 +86,52 @@
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ์œ ํšจํ•œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -> - [] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. -> - [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์œ ํšจํ•œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. +> - [ ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์ž…๋ ฅ(๋ฌธ์ž, ๊ธฐํ˜ธ) ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ์†Œ์ˆ˜ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ๊ณต๋ฐฑ ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] 1 ~ 30 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. +> - [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž ์ž…๋ ฅ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
### 6. ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ -- [] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ -- [] ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ +- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ +- [ ] ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ
> ํ…Œ์ŠคํŠธ ๋ชฉ๋ก -> - [] ๊ฐ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ผ์น˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•œ๋‹ค. -> - [] 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 1๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. -> - [] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ํฌํ•จ ์‹œ 2๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. -> - [] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 3๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. -> - [] 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 4๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. -> - [] 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์‹œ ์‹œ 5๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. -> - [] ์ผ์น˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํ†ต๊ณ„ ๊ฐ์ฒด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐฑ์‹ ๋œ๋‹ค. +> - [ ] ๊ฐ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ผ์น˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•œ๋‹ค. +> - [ ] 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 1๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ํฌํ•จ ์‹œ 2๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 3๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ ์‹œ 4๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์‹œ ์‹œ 5๋“ฑ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. +> - [ ] ์ผ์น˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ํ†ต๊ณ„ ๊ฐ์ฒด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐฑ์‹ ๋œ๋‹ค.
### 7. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ์žฌ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ -- [] ํ•ด๋‹น ์ž…๋ ฅ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ +- [ ] ํ•ด๋‹น ์ž…๋ ฅ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›๊ธฐ
--- ## ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ ๋ณธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ์ ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋ฆฌ์ฝ”์Šค์—์„œ ํ•™์Šตํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹(๋ฌธ์ œ ๋ถ„ํ•ด, ์„ค๊ณ„, TDD)์ด ์ฝ”๋“œ์— ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์— ์žˆ๋‹ค. -- [] ์ž…๋ ฅ/์ถœ๋ ฅ ์—ญํ• ์€ ์ œ๊ณต๋œ InputView, OutputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. - -- [] ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~30๊นŒ์ง€์ด๋‹ค. -- [] 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- [] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 5๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- [] ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. -- [] 1๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 100,000,000์› -- [] 2๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 10,000,000์› -- [] 3๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› -- [] 4๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 500,000์› -- [] 5๋“ฑ: 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› -- [] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. -- [] ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 500์›์ด๋‹ค. -- [] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. -- [] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. -- [] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. \ No newline at end of file +- [ ] ์ž…๋ ฅ/์ถœ๋ ฅ ์—ญํ• ์€ ์ œ๊ณต๋œ InputView, OutputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. + +- [ ] ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~30๊นŒ์ง€์ด๋‹ค. +- [ ] 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 5๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [ ] ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. +- [ ] 1๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 100,000,000์› +- [ ] 2๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 10,000,000์› +- [ ] 3๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› +- [ ] 4๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 500,000์› +- [ ] 5๋“ฑ: 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› +- [ ] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. +- [ ] ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 500์›์ด๋‹ค. +- [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. +- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. +- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. \ No newline at end of file From d9aeee9c424d8ea5493919c909cf87b8d220f5d0 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:27:15 +0900 Subject: [PATCH 03/12] feat(view): add input feature --- src/App.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 091aa0a5..8b4a27fb 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,57 @@ +import { InputView, OutputView } from "./view.js"; +import { InputValidator } from "./validator/InputValidator.js"; +import LottoMachine from "./model/LottoMachine.js"; +import { create2DArray } from "./util/create2DArray.js"; + class App { - async run() {} + async run() { + const purchaseAmount = await this.getPurchaseAmount(); + const lottoMachine = new LottoMachine(Number(purchaseAmount)); + const lottos = create2DArray(lottoMachine.getLottos()); + OutputView.printPurchasedLottos(lottos); + + const winningNumbers = await this.getWinningNumbers(); + const bonusNumber = await this.getBonusNumber(winningNumbers); + + const result = lottoMachine.calculateResult(winningNumbers, bonusNumber); + OutputView.printResult(result); + } + + async getPurchaseAmount() { + while (true) { + try { + const purchaseAmount = await InputView.askAmount(); + InputValidator.validatePurchaseAmount(purchaseAmount); + return purchaseAmount; + } catch(e) { + OutputView.printErrorMessage(e.message); + } + } + } + + async getWinningNumbers() { + while (true) { + try { + const input = await InputView.askWinningLotto(); + const winningNumbers = InputValidator.validateWinningNumbers(input); + return winningNumbers; + } catch (e) { + OutputView.printErrorMessage(e.message); + } + } + } + + async getBonusNumber(winningNumbers) { + while (true) { + try { + const input = await InputView.askBonusNumber(); + const bonusNumber = InputValidator.validateBonusNumber(input, winningNumbers); + return bonusNumber; + } catch (e) { + OutputView.printErrorMessage(e.message); + } + } + } } export default App; From 290ae2447f2f5cad6327acca9235711a668287fb Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:27:49 +0900 Subject: [PATCH 04/12] feat(validator): add validation for input --- src/util/validate.js | 43 +++++++++++++++++++++++ src/validator/InputValidator.js | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 src/util/validate.js create mode 100644 src/validator/InputValidator.js diff --git a/src/util/validate.js b/src/util/validate.js new file mode 100644 index 00000000..58dbc169 --- /dev/null +++ b/src/util/validate.js @@ -0,0 +1,43 @@ +import { LOTTO_CONFIG } from "../constant/lotto.js"; + +export const validate = { + isNumber(input) { + const number = Number(input); + return !Number.isNaN(number); + }, + + isInteger(input) { + const number = Number(input); + return Number.isInteger(number); + }, + + isEmpty(input = '') { + return String(input).trim() === ''; + }, + + isPositiveNumber(input) { + const number = Number(input); + return number > 0; + }, + + hasDuplicate(numbers) { + return new Set(numbers).size !== numbers.length; + }, + + hasValidCount(numbers) { + return numbers.length === LOTTO_CONFIG.RANDOM_COUNT; + }, + + areNumbersInRange(numbers) { + const isValidNumber = (num) => + Number.isInteger(num) && + num >= LOTTO_CONFIG.RANDOM_MIN && + num <= LOTTO_CONFIG.RANDOM_MAX; + + return numbers.every(isValidNumber); + }, + + isInRange(number) { + return number >= LOTTO_CONFIG.RANDOM_MIN && number <= LOTTO_CONFIG.RANDOM_MAX; + } +}; \ No newline at end of file diff --git a/src/validator/InputValidator.js b/src/validator/InputValidator.js new file mode 100644 index 00000000..b0acb1d9 --- /dev/null +++ b/src/validator/InputValidator.js @@ -0,0 +1,60 @@ +import { ERROR_MESSAGE } from '../constant/message.js'; +import { validate } from '../util/validate.js'; + +export const InputValidator = { + validatePurchaseAmount(input) { + if (validate.isEmpty(input)) { + throw new Error(ERROR_MESSAGE.PURCHASE.EMPTY_INPUT); + } + if (!validate.isNumber(input)) { + throw new Error(ERROR_MESSAGE.PURCHASE.NOT_NUMBER); + } + if (!validate.isInteger(input)) { + throw new Error(ERROR_MESSAGE.PURCHASE.NOT_INTEGER); + } + if (!validate.isPositiveNumber(input)) { + throw new Error(ERROR_MESSAGE.PURCHASE.NOT_POSITIVE); + } + if (Number(input) % 500 !== 0) { + throw new Error(ERROR_MESSAGE.PURCHASE.NOT_MULTIPLE_UNIT); + } + + return input; + }, + + validateWinningNumbers(numbers) { + if (!validate.hasValidCount(numbers)) { + throw new Error(ERROR_MESSAGE.WINNING_NUMBERS.INVALID_COUNT); + } + if (!validate.areNumbersInRange(numbers)) { + throw new Error(ERROR_MESSAGE.WINNING_NUMBERS.OUT_OF_RANGE); + } + if (validate.hasDuplicate(numbers)) { + throw new Error(ERROR_MESSAGE.WINNING_NUMBERS.DUPLICATE_NUMBER); + } + + return numbers; + }, + + validateBonusNumber(input, winningNumbers) { + if (validate.isEmpty(input)) { + throw new Error(ERROR_MESSAGE.BONUS.EMPTY_INPUT); + } + if (!validate.isNumber(input)) { + throw new Error(ERROR_MESSAGE.BONUS.NOT_NUMBER); + } + if (!validate.isInteger(input)) { + throw new Error(ERROR_MESSAGE.BONUS.NOT_INTEGER); + } + const number = Number(input); + + if (!validate.isInRange(number)) { + throw new Error(ERROR_MESSAGE.BONUS.OUT_OF_RANGE); + } + if (winningNumbers.includes(number)) { + throw new Error(ERROR_MESSAGE.BONUS.DUPLICATE_WITH_WINNING); + } + + return number; + } +}; \ No newline at end of file From 600be74528405aecd4f1a6b41db9fce42209f74a Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:29:28 +0900 Subject: [PATCH 05/12] feat(model): add lotto sorting feature --- src/model/Lotto.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/model/Lotto.js diff --git a/src/model/Lotto.js b/src/model/Lotto.js new file mode 100644 index 00000000..938c8bed --- /dev/null +++ b/src/model/Lotto.js @@ -0,0 +1,31 @@ +import { validate } from "../util/validate.js"; +import { ERROR_MESSAGE } from "../constant/message.js"; + +class Lotto { + #numbers; + + constructor(numbers) { + this.#validate(numbers); + this.#numbers = numbers.slice().sort((a, b) => a - b); + } + + #validate(numbers) { + if (!validate.hasValidCount(numbers)) { + throw new Error(ERROR_MESSAGE.INVALID_COUNT); + } + + if (validate.hasDuplicate(numbers)) { + throw new Error(ERROR_MESSAGE.DUPLICATE_NUMBER); + } + + if (!validate.areNumbersInRange(numbers)) { + throw new Error(ERROR_MESSAGE.OUT_OF_RANGE); + } + } + + getNumbers() { + return this.#numbers; + } +} + +export default Lotto; \ No newline at end of file From df594180b9ed425aac96648c31252b899f892cb9 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:30:32 +0900 Subject: [PATCH 06/12] feat(constant): Constantizing system messages --- src/constant/lotto.js | 7 +++++++ src/constant/message.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/constant/lotto.js create mode 100644 src/constant/message.js diff --git a/src/constant/lotto.js b/src/constant/lotto.js new file mode 100644 index 00000000..db263f50 --- /dev/null +++ b/src/constant/lotto.js @@ -0,0 +1,7 @@ +export const LOTTO_CONFIG = Object.freeze({ + RANDOM_MIN: 1, + RANDOM_MAX: 30, + RANDOM_COUNT: 5, + LOTTO_PRICE: 500, + DELIMITER: ',', +}); \ No newline at end of file diff --git a/src/constant/message.js b/src/constant/message.js new file mode 100644 index 00000000..194f2eb0 --- /dev/null +++ b/src/constant/message.js @@ -0,0 +1,29 @@ +export const ERROR_MESSAGE = Object.freeze({ + OUT_OF_RANGE: '๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ 30์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + INVALID_COUNT: '๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 5๊ฐœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + DUPLICATE_NUMBER: "๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + + PURCHASE: { + EMPTY_INPUT: '๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.', + NOT_NUMBER: '๊ตฌ์ž…๊ธˆ์•ก์€ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + NOT_INTEGER: '๊ตฌ์ž…๊ธˆ์•ก์€ ์ •์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + NOT_POSITIVE: '๊ตฌ์ž…๊ธˆ์•ก์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', + NOT_MULTIPLE_UNIT: '๊ตฌ์ž…๊ธˆ์•ก์€ 500์› ๋‹จ์œ„๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + }, + + WINNING_NUMBERS: { + OUT_OF_RANGE: '๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ 30์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + INVALID_COUNT: '๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” 5๊ฐœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + DUPLICATE_NUMBER: "๋‹น์ฒจ ๋ฒˆํ˜ธ๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + }, + + BONUS: { + EMPTY_INPUT: '๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.', + NOT_NUMBER: '๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + NOT_INTEGER: '๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” ์ •์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + OUT_OF_RANGE: '๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ 30์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.', + DUPLICATE_WITH_WINNING: '๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋Š” ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', + } +}); + + \ No newline at end of file From ecf24c18057f7e12adee5649fbc911cdbcee4ca6 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:30:46 +0900 Subject: [PATCH 07/12] docs(readme): mark completed features --- README.md | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 1e739e0b..c5ff29d3 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ ## ๐Ÿ“ ๊ตฌํ˜„ ๊ธฐ๋Šฅ ๋ชฉ๋ก ### 1. ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [ ] `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [x] `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [x] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) @@ -27,7 +27,7 @@
### 2. ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ์ถœ๋ ฅํ•˜๊ธฐ -- [ ] ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๊ตฌํ•˜๊ธฐ (๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก / 500) +- [x] ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๊ตฌํ•˜๊ธฐ (๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก / 500) - [ ] `2๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.` ์ถœ๋ ฅ
@@ -52,9 +52,9 @@
### 4. ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [ ] `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [ ] ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆํ˜ธ ๊ตฌ๋ถ„ํ•˜๊ธฐ -- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [x] `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [x] ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒˆํ˜ธ ๊ตฌ๋ถ„ํ•˜๊ธฐ +- [x] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ๊ณต๋ฐฑ์ด ์žˆ์„ ๊ฒฝ์šฐ @@ -73,8 +73,8 @@
### 5. ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [ ] `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ -- [ ] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ +- [x] `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` ์ถœ๋ ฅ +- [x] ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ผ ๊ฒฝ์šฐ throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ - [์˜ˆ์™ธ] ์ž…๋ ฅ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ - [์˜ˆ์™ธ] ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๋ฌธ์ž, ๊ธฐํ˜ธ) @@ -96,7 +96,7 @@
### 6. ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ -- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ +- [x] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ - [ ] ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅํ•˜๊ธฐ
@@ -111,27 +111,27 @@
### 7. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ›„ ์žฌ์ž…๋ ฅ ๋ฐ›๊ธฐ -- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ -- [ ] ํ•ด๋‹น ์ž…๋ ฅ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›๊ธฐ +- [x] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ [ERROR]๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ +- [x] ํ•ด๋‹น ์ž…๋ ฅ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฐ›๊ธฐ
--- ## ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ ๋ณธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชฉ์ ์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋ฆฌ์ฝ”์Šค์—์„œ ํ•™์Šตํ•œ ๊ฐœ๋ฐœ ๋ฐฉ์‹(๋ฌธ์ œ ๋ถ„ํ•ด, ์„ค๊ณ„, TDD)์ด ์ฝ”๋“œ์— ๋“œ๋Ÿฌ๋‚˜๋Š” ๊ฒƒ์— ์žˆ๋‹ค. -- [ ] ์ž…๋ ฅ/์ถœ๋ ฅ ์—ญํ• ์€ ์ œ๊ณต๋œ InputView, OutputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. - -- [ ] ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~30๊นŒ์ง€์ด๋‹ค. -- [ ] 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 5๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- [ ] ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. -- [ ] 1๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 100,000,000์› -- [ ] 2๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 10,000,000์› -- [ ] 3๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› -- [ ] 4๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 500,000์› -- [ ] 5๋“ฑ: 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› -- [ ] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. -- [ ] ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 500์›์ด๋‹ค. -- [ ] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. +- [x] ์ž…๋ ฅ/์ถœ๋ ฅ ์—ญํ• ์€ ์ œ๊ณต๋œ InputView, OutputView์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. + +- [x] ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~30๊นŒ์ง€์ด๋‹ค. +- [x] 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 5๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [x] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 5๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. +- [x] ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. +- [x] 1๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 100,000,000์› +- [x] 2๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 10,000,000์› +- [x] 3๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› +- [x] 4๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 500,000์› +- [x] 5๋“ฑ: 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› +- [x] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. +- [x] ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 500์›์ด๋‹ค. +- [x] ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - [ ] ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. -- [ ] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. \ No newline at end of file +- [x] ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ Error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. \ No newline at end of file From 8f41e6f789c2573e12814286ce5bd5dd6f69fcaf Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:31:17 +0900 Subject: [PATCH 08/12] feat(parser): add feature to split input by commas --- src/util/parser.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/util/parser.js diff --git a/src/util/parser.js b/src/util/parser.js new file mode 100644 index 00000000..2cfb2298 --- /dev/null +++ b/src/util/parser.js @@ -0,0 +1,7 @@ +import { LOTTO_CONFIG } from "../constant/lotto.js"; + +export function parseLottoNumbers(input) { + const splitted = input.split(LOTTO_CONFIG.DELIMITER); + const numbers = splitted.map(n => Number(n.trim())); + return numbers; +} \ No newline at end of file From 70d7fc7c71a07a6617ed43ee9742c16a332df6b3 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:32:02 +0900 Subject: [PATCH 09/12] feat(random): add feature to draw random number --- src/util/random.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/util/random.js diff --git a/src/util/random.js b/src/util/random.js new file mode 100644 index 00000000..ccb21292 --- /dev/null +++ b/src/util/random.js @@ -0,0 +1,9 @@ +import { MissionUtils } from '@woowacourse/mission-utils'; +import { LOTTO_CONFIG } from '../constant/lotto.js'; + +export const getRandomLottoNumbers = () => + MissionUtils.Random.pickUniqueNumbersInRange( + LOTTO_CONFIG.RANDOM_MIN, + LOTTO_CONFIG.RANDOM_MAX, + LOTTO_CONFIG.RANDOM_COUNT + ); \ No newline at end of file From 1c6f1acd33945c1716ca86ede0c481cd40bb30c9 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:33:27 +0900 Subject: [PATCH 10/12] feat(model): add feature to calculate lotto results --- src/model/LottoMachine.js | 83 +++++++++++++++++++++++++++++++++++++++ src/util/create2DArray.js | 10 +++++ 2 files changed, 93 insertions(+) create mode 100644 src/model/LottoMachine.js create mode 100644 src/util/create2DArray.js diff --git a/src/model/LottoMachine.js b/src/model/LottoMachine.js new file mode 100644 index 00000000..1474e9ef --- /dev/null +++ b/src/model/LottoMachine.js @@ -0,0 +1,83 @@ +import Lotto from './Lotto.js'; +import { getRandomLottoNumbers } from '../util/random.js'; +import { LOTTO_CONFIG } from '../constant/lotto.js'; + +class LottoMachine { + #lottos = []; + #purchaseAmount; + #lottoCount; + + constructor(purchaseAmount) { + this.#purchaseAmount = purchaseAmount; + this.#lottoCount = Math.floor(purchaseAmount / LOTTO_CONFIG.LOTTO_PRICE); + this.#generateLotto(); + } + + #generateLotto() { + for (let i = 0; i < this.#lottoCount; i += 1) { + const numbers = getRandomLottoNumbers(); + this.#lottos.push(new Lotto(numbers)); + } + } + + getLottoCount() { + return this.#lottoCount; + } + + getLottos() { + return this.#lottos; + } + + calculateResult(winningNumbers, bonusNumber) { + const result = this.#initResult(); + this.#lottos.forEach(lotto => { + const matchCount = this.#countMatches(lotto, winningNumbers); + const hasBonus = this.#hasBonus(lotto, bonusNumber); + this.#updateResult(result, matchCount, hasBonus); + }); + return result; + } + + #initResult() { + return { + ZERO: 0, + FIRST: 0, + SECOND: 0, + THIRD: 0, + FOURTH: 0, + FIFTH: 0, + }; + } + + #countMatches(lotto, winningNumbers) { + const numbers = lotto.getNumbers(); + const matchedNumbers = numbers.filter(num => winningNumbers.includes(num)); + return matchedNumbers.length; + } + + #hasBonus(lotto, bonusNumber) { + return lotto.getNumbers().includes(bonusNumber); + } + + #updateResult(result, matchCount, hasBonus) { + if (matchCount === 5) result.FIRST += 1; + else if (matchCount === 4 && hasBonus) result.SECOND += 1; + else if (matchCount === 4) result.THIRD += 1; + else if (matchCount === 3 && hasBonus) result.FOURTH += 1; + else if (matchCount === 2 && hasBonus) result.FIFTH += 1; + else if (matchCount === 0) result.ZERO +=1; + } + + buildStatistics(result) { + return [ + { match: 0, prize: 0, count: result.ZERO }, + { match: 2, prize: 5000, count: result.FIFTH, bonus: true }, + { match: 3, prize: 50000, count: result.FOURTH, bonus: true }, + { match: 4, prize: 1500000, count: result.THIRD }, + { match: 4, prize: 30000000, count: result.SECOND, bonus: true }, + { match: 5, prize: 2000000000, count: result.FIRST }, + ]; + } +} + +export default LottoMachine; \ No newline at end of file diff --git a/src/util/create2DArray.js b/src/util/create2DArray.js new file mode 100644 index 00000000..205247f2 --- /dev/null +++ b/src/util/create2DArray.js @@ -0,0 +1,10 @@ +export function create2DArray(lottos) { + const lottoArr = []; + + lottos.forEach((lotto) => { + lotto.getNumbers(); + lottoArr.push(); + }); + + return lottoArr; +} \ No newline at end of file From 8e72189f2d7e9304f64f40c7b7be98a98dc0e3f8 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:50:53 +0900 Subject: [PATCH 11/12] fix(model): edit amount return value --- src/model/LottoMachine.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/model/LottoMachine.js b/src/model/LottoMachine.js index 1474e9ef..bb9fa2cb 100644 --- a/src/model/LottoMachine.js +++ b/src/model/LottoMachine.js @@ -72,10 +72,10 @@ class LottoMachine { return [ { match: 0, prize: 0, count: result.ZERO }, { match: 2, prize: 5000, count: result.FIFTH, bonus: true }, - { match: 3, prize: 50000, count: result.FOURTH, bonus: true }, + { match: 3, prize: 500000, count: result.FOURTH, bonus: true }, { match: 4, prize: 1500000, count: result.THIRD }, - { match: 4, prize: 30000000, count: result.SECOND, bonus: true }, - { match: 5, prize: 2000000000, count: result.FIRST }, + { match: 4, prize: 10000000, count: result.SECOND, bonus: true }, + { match: 5, prize: 100000000, count: result.FIRST }, ]; } } From a75f51ed5b53198e8e19bda4565c6edd41cfb972 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 10 Jan 2026 16:57:30 +0900 Subject: [PATCH 12/12] =?UTF-8?q?2=EC=B0=A8=EC=9B=90=20=EB=B0=B0=EC=97=B4?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 2 +- src/model/LottoMachine.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 8b4a27fb..c12ddd21 100644 --- a/src/App.js +++ b/src/App.js @@ -7,7 +7,7 @@ class App { async run() { const purchaseAmount = await this.getPurchaseAmount(); const lottoMachine = new LottoMachine(Number(purchaseAmount)); - const lottos = create2DArray(lottoMachine.getLottos()); + const lottos = create2DArray(lottoMachine.get2DArray()); OutputView.printPurchasedLottos(lottos); const winningNumbers = await this.getWinningNumbers(); diff --git a/src/model/LottoMachine.js b/src/model/LottoMachine.js index bb9fa2cb..002bf9b6 100644 --- a/src/model/LottoMachine.js +++ b/src/model/LottoMachine.js @@ -20,6 +20,16 @@ class LottoMachine { } } + get2DArray(r, c) { + const lottoArr = []; + for (let i = 0 ; i < r ; i++) { + const temp = []; + this.#generateLotto(); + result.push(temp); + } + return lottoArr; +} + getLottoCount() { return this.#lottoCount; }