diff --git a/README.md b/README.md index aff2c46597..e46f540817 100644 --- a/README.md +++ b/README.md @@ -1,239 +1,60 @@ # ๋ฏธ์…˜ - ๋กœ๋˜ -## ๐Ÿ” ์ง„ํ–‰ ๋ฐฉ์‹ +## โœ๏ธ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก -- ๋ฏธ์…˜์€ **๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ, ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ** ์„ธ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. -- ์„ธ ๊ฐœ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. ํŠนํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. -- ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ธฐ์žฌ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. +### `App.js`์˜ `play` ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ -## ๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ• +- [x] play ๋ฉ”์„œ๋“œ ์ƒ์„ฑ -- ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค. - - GitHub์„ ํ™œ์šฉํ•œ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด - ์ œ์ถœํ•œ๋‹ค. -- GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ [์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์›](https://apply.techcourse.co.kr) ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•œ๋‹ค. - - ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ [์ œ์ถœ ๊ฐ€์ด๋“œ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse#์ œ์ถœ-๊ฐ€์ด๋“œ) ์ฐธ๊ณ  - - **Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.** +### ๋กœ๋˜ ๋กœ์ง -## ๐Ÿšจ ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ - 0์  ๋ฐฉ์ง€ +- [x] ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก ์ž…๋ ฅ -- ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ํ–ˆ๋”๋ผ๋„ **์š”๊ตฌ ์‚ฌํ•ญ์— ๋ช…์‹œ๋œ ์ถœ๋ ฅ๊ฐ’ ํ˜•์‹์„ ์ง€ํ‚ค์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์ ์œผ๋กœ ์ฒ˜๋ฆฌ**ํ•œ๋‹ค. -- ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ๋’ค ์•„๋ž˜ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -- **ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์ ์œผ๋กœ ์ฒ˜๋ฆฌ**๋˜๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ ํ™•์ธ ํ›„ ์ œ์ถœํ•œ๋‹ค. + - ๊ตฌ์ž… ๊ธˆ์•ก ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถœ๋ ฅ
+ `๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` -### ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฐ€์ด๋“œ + - ์ž˜๋ชป๋œ ๊ฐ’ ์ž…๋ ฅ ์‹œ **throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ**
+ - 1,000์›์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ -- ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์œ„ํ•ด `Node.js` ๋ฒ„์ „ `18.17.1` ์ด์ƒ์ด ํ•„์š”ํ•˜๋‹ค. -- ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค. +- [x] ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜ ๋ฐœํ–‰(๋กœ๋˜ 1์žฅ ๋‹น 1,000์›) -```bash -npm install -``` + - ๊ตฌ๋งค ๊ฐฏ์ˆ˜ ๋ฌธ๊ตฌ ์ถœ๋ ฅ
+ `${๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก/1000}๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.` -- ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. + - ๊ฐ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ถœ๋ ฅ(๊ตฌ๋งค ๊ฐฏ์ˆ˜ ๋งŒํผ) + - `Random API`๋ฅผ ์ด์šฉํ•˜์—ฌ 1-45 ์‚ฌ์ด ๊ฐ’ 6๊ฐœ ์„ ํƒ + - ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค. -```bash -npm test -``` +- [x] ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ž…๋ ฅ ---- + - ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถœ๋ ฅ
+ `๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` -## ๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ + - ์ž˜๋ชป๋œ ๊ฐ’ ์ž…๋ ฅ ์‹œ **throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ**
+ - ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ–ˆ์„ ๋•Œ, ๋ฒˆํ˜ธ 6๊ฐœ + - ๊ฐ ๋ฒˆํ˜ธ๊ฐ€ 1-45 ๋ฒ”์œ„ ๋‚ด์˜ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ -- ๋กœ๋˜ ๊ฒŒ์ž„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋กœ๋˜ ๊ฒŒ์ž„์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. +- [x] ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ -``` -- ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~45๊นŒ์ง€์ด๋‹ค. -- 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 6๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 6๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. - - 1๋“ฑ: 6๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 2,000,000,000์› - - 2๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 30,000,000์› - - 3๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› - - 4๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 50,000์› - - 5๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› -``` + - ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ์ถœ๋ ฅ
+ `๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.` -- ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. -- ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 1,000์›์ด๋‹ค. -- ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. -- ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ ๋ฐ ์ˆ˜์ต๋ฅ ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. -- ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ `throw`๋ฌธ์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค. - ``` - ์˜ˆ์‹œ) [ERROR] ์ˆซ์ž๊ฐ€ ์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค. - ``` - -### ์ž…์ถœ๋ ฅ ์š”๊ตฌ ์‚ฌํ•ญ - -#### ์ž…๋ ฅ - -- ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ๊ตฌ์ž… ๊ธˆ์•ก์€ 1,000์› ๋‹จ์œ„๋กœ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉฐ 1,000์›์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค. - -``` -14000 -``` - -- ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ๋ฒˆํ˜ธ๋Š” ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. - -``` -1,2,3,4,5,6 -``` - -- ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. - -``` -7 -``` - -#### ์ถœ๋ ฅ - -- ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค. - -``` -8๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. -[8, 21, 23, 41, 42, 43] -[3, 5, 11, 16, 32, 38] -[7, 11, 16, 35, 36, 44] -[1, 8, 11, 31, 41, 42] -[13, 14, 16, 38, 42, 45] -[7, 11, 30, 40, 42, 43] -[2, 13, 22, 32, 38, 45] -[1, 3, 5, 14, 22, 45] -``` - -- ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•œ๋‹ค. - -``` -3๊ฐœ ์ผ์น˜ (5,000์›) - 1๊ฐœ -4๊ฐœ ์ผ์น˜ (50,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜ (1,500,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜, ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜ (30,000,000์›) - 0๊ฐœ -6๊ฐœ ์ผ์น˜ (2,000,000,000์›) - 0๊ฐœ -``` + - ์ž˜๋ชป๋œ ๊ฐ’ ์ž…๋ ฅ ์‹œ **throw๋ฌธ์„ ํ†ตํ•ด ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ**
+ - ๋ฒˆํ˜ธ๊ฐ€ 1-45 ๋ฒ”์œ„ ๋‚ด์˜ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ -- ์ˆ˜์ต๋ฅ ์€ ์†Œ์ˆ˜์  ๋‘˜์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค. (ex. 100.0%, 51.5%, 1,000,000.0%) +- [x] ๋กœ๋˜ ๊ฒฐ๊ณผ ์ถœ๋ ฅ -``` -์ด ์ˆ˜์ต๋ฅ ์€ 62.5%์ž…๋‹ˆ๋‹ค. -``` + - ๋‹น์ฒจ ๋‚ด์—ญ ์ถœ๋ ฅ + - ์ˆ˜์ต๋ฅ ์€ ์†Œ์ˆ˜์  ๋‘˜์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ + - ์•„๋ž˜๋Š” ์˜ˆ์‹œ์ด๋‹ค. -- ์˜ˆ์™ธ ์ƒํ™ฉ ์‹œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์—๋Ÿฌ ๋ฌธ๊ตฌ๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. - -``` -[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ 45 ์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. -``` - -#### ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ - -``` -๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -8000 - -8๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. -[8, 21, 23, 41, 42, 43] -[3, 5, 11, 16, 32, 38] -[7, 11, 16, 35, 36, 44] -[1, 8, 11, 31, 41, 42] -[13, 14, 16, 38, 42, 45] -[7, 11, 30, 40, 42, 43] -[2, 13, 22, 32, 38, 45] -[1, 3, 5, 14, 22, 45] - -๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -1,2,3,4,5,6 - -๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -7 - -๋‹น์ฒจ ํ†ต๊ณ„ ---- -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%์ž…๋‹ˆ๋‹ค. -``` - ---- - -## ๐ŸŽฏ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ - -- Node.js 18.17.1 ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. **Node.js 18.17.1์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.** -- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ `App.js`์˜ `play` ๋ฉ”์„œ๋“œ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. - -**์˜ˆ์‹œ** - -```javascript -const app = new App(); -app.play(); -``` - -- `package.json`์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(jQuery, Lodash ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ˆœ์ˆ˜ Vanilla JS๋กœ๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค. -- [JavaScript ์ฝ”๋“œ ์ปจ๋ฒค์…˜](https://github.com/woowacourse/woowacourse-docs/tree/main/styleguide/javascript)์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•œ๋‹ค -- ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ `process.exit()`๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. -- ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด `ApplicationTest`์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค. **ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.** -- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. -- indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. - - ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค. - - ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. -- ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ. -- Jest๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณธ์ธ์ด ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•œ๋‹ค. - -### ์ถ”๊ฐ€๋œ ์š”๊ตฌ ์‚ฌํ•ญ - -- ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 15๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. - - ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. -- else๋ฅผ ์ง€์–‘ํ•œ๋‹ค. - - ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. - - ๋•Œ๋กœ๋Š” if/else, switch๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊น”๋”ํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋Š ๊ฒฝ์šฐ์— ์“ฐ๋Š” ๊ฒƒ์ด ์ ์ ˆํ• ์ง€ ์Šค์Šค๋กœ ๊ณ ๋ฏผํ•ด ๋ณธ๋‹ค. -- ๋„๋ฉ”์ธ ๋กœ์ง์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, UI(Console.readLineAsync, Console.print) ๋กœ์ง์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ œ์™ธํ•œ๋‹ค. - - ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์™€ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. - - ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด `__tests__/LottoTest.js`๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•™์Šตํ•œ ํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. - -### ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - -- `@woowacourse/mission-utils`์—์„œ ์ œ๊ณตํ•˜๋Š” `Random` ๋ฐ `Console` API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. - - Random ๊ฐ’ ์ถ”์ถœ์€ `Random.pickUniqueNumbersInRange()`๋ฅผ ํ™œ์šฉํ•œ๋‹ค. - - ์‚ฌ์šฉ์ž์˜ ๊ฐ’์„ ์ž…๋ ฅ ๋ฐ›๊ณ  ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” `Console.readLineAsync`, `Console.print`๋ฅผ ํ™œ์šฉํ•œ๋‹ค. - -#### ์‚ฌ์šฉ ์˜ˆ์‹œ - -```javascript -MissionUtils.Random.pickUniqueNumbersInRange(1, 45, 6); -``` - -### Lotto ํด๋ž˜์Šค - -- ์ œ๊ณต๋œ `Lotto` ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. -- `numbers`์˜ `#` prefix๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. -- `Lotto`์— ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. - -```javascript -class Lotto { - #numbers; - - constructor(numbers) { - this.#validate(numbers); - this.#numbers = numbers; - } - - #validate(numbers) { - if (numbers.length !== 6) { - throw new Error("[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 6๊ฐœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); - } - } - - // TODO: ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ -} -``` - ---- - -## โœ๏ธ ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ - -- ๋ฏธ์…˜์€ [javascript-lotto-6](https://github.com/woowacourse-precourse/javascript-lotto-6/) ์ €์žฅ์†Œ๋ฅผ Fork & Cloneํ•ด ์‹œ์ž‘ํ•œ๋‹ค. -- **๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ `docs/README.md`์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌ**ํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค. -- **Git์˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์•ž ๋‹จ๊ณ„์—์„œ `docs/README.md`์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„**๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. -- ๊ณผ์ œ ์ง„ํ–‰ ๋ฐ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. + ``` + ๋‹น์ฒจ ํ†ต๊ณ„ + --- + 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%์ž…๋‹ˆ๋‹ค. + ``` diff --git a/__tests__/LottoTest.js b/__tests__/LottoTest.js index 97bd457659..6642a835e2 100644 --- a/__tests__/LottoTest.js +++ b/__tests__/LottoTest.js @@ -1,5 +1,12 @@ +import { MissionUtils } from "@woowacourse/mission-utils"; import Lotto from "../src/Lotto.js"; +const getLogSpy = () => { + const logSpy = jest.spyOn(MissionUtils.Console, "print"); + logSpy.mockClear(); + return logSpy; +}; + describe("๋กœ๋˜ ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ", () => { test("๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ 6๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐ€๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.", () => { expect(() => { @@ -7,12 +14,19 @@ describe("๋กœ๋˜ ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ", () => { }).toThrow("[ERROR]"); }); - // TODO: ์ด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ ์ฝ”๋“œ ์ž‘์„ฑ test("๋กœ๋˜ ๋ฒˆํ˜ธ์— ์ค‘๋ณต๋œ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.", () => { expect(() => { new Lotto([1, 2, 3, 4, 5, 5]); }).toThrow("[ERROR]"); }); - // ์•„๋ž˜์— ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๊ฐ€๋Šฅ + test("๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.", () => { + const logSpy = getLogSpy(); + + new Lotto([5, 3, 1, 4, 2, 6]); + + const log = "[1, 2, 3, 4, 5, 6]"; + + expect(logSpy).toHaveBeenCalledWith(expect.stringContaining(log)); + }); }); diff --git a/src/App.js b/src/App.js index c38b30d5b2..c964e58bb9 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,39 @@ +import { + countResults, + getValidPurchaseAmount, + getWinningNumbersAndBonus, + printStatistics, + purchaseLottos, +} from "./LottoUtils.js"; +import * as CONSTANTS from "./Constants.js"; + class App { - async play() {} + constructor() { + this.purchaseAmount = 0; + this.lottos = []; + this.winningResult = { winningNums: [], bonusNum: 0 }; + this.statistics = { + first_prize: 0, + second_prize: 0, + third_prize: 0, + fourth_prize: 0, + fifth_prize: 0, + totalPrice: 0, + }; + } + async play() { + this.purchaseAmount = await getValidPurchaseAmount(); + const lottoCnt = this.purchaseAmount / CONSTANTS.LOTTO_TICKET_PRICE; + this.lottos = purchaseLottos(lottoCnt); + this.winningResult = await getWinningNumbersAndBonus(); + this.statistics = countResults( + this.lottos, + this.winningResult.winningNums, + this.winningResult.bonusNum, + this.statistics + ); + printStatistics(this.purchaseAmount, this.statistics); + } } export default App; diff --git a/src/Constants.js b/src/Constants.js new file mode 100644 index 0000000000..11d9383c21 --- /dev/null +++ b/src/Constants.js @@ -0,0 +1,30 @@ +export const ERROR_INVALID_NUMBER = + "[ERROR] ๊ตฌ๋งค ๊ธˆ์•ก์€ ์œ ํšจํ•œ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."; +export const ERROR_NOT_IN_1000_UNITS = + "[ERROR] ๊ตฌ๋งค ๊ธˆ์•ก์€ 1,000์› ๋‹จ์œ„์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; +export const ERROR_INVALID_LOTTO_NUMBER_COUNT = + "[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 6๊ฐœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."; +export const ERROR_DUPLICATE_LOTTO_NUMBERS = + "[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š์€ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + +export const LOTTO_PURCHASE_MESSAGE = "๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n"; +export const WINNING_NUMBER_INPUT_MESSAGE = "๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n"; +export const BONUS_NUMBER_INPUT_MESSAGE = "๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.\n"; + +export const LOTTO_STATISTICS_HEADER = "๋‹น์ฒจ ํ†ต๊ณ„\n---"; +export const PRIZE_3_MATCH = "3๊ฐœ ์ผ์น˜ (5,000์›) - "; +export const PRIZE_4_MATCH = "4๊ฐœ ์ผ์น˜ (50,000์›) - "; +export const PRIZE_5_MATCH = "5๊ฐœ ์ผ์น˜ (1,500,000์›) - "; +export const PRIZE_5_MATCH_WITH_BONUS = + "5๊ฐœ ์ผ์น˜, ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜ (30,000,000์›) - "; +export const PRIZE_6_MATCH = "6๊ฐœ ์ผ์น˜ (2,000,000,000์›) - "; +export const TOTAL_PROFIT_PERCENTAGE = "์ด ์ˆ˜์ต๋ฅ ์€ "; + +export const LOTTO_TICKET_PRICE = 1000; +export const LOTTO_NUMBERS_COUNT = 6; + +export const MATCH_3 = 5_000; +export const MATCH_4 = 50_000; +export const MATCH_5 = 1_500_000; +export const MATCH_5_WITH_BONUS = 30_000_000; +export const MATCH_6 = 2_000_000_000; diff --git a/src/Lotto.js b/src/Lotto.js index cb0b1527e9..2ee97f8b61 100644 --- a/src/Lotto.js +++ b/src/Lotto.js @@ -1,18 +1,40 @@ +import { Console } from "@woowacourse/mission-utils"; + +import * as CONSTANTS from "./Constants.js"; + class Lotto { #numbers; constructor(numbers) { this.#validate(numbers); - this.#numbers = numbers; + this.#numbers = numbers.sort((a, b) => a - b); + this.#printNumbers(); } #validate(numbers) { if (numbers.length !== 6) { - throw new Error("[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 6๊ฐœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); + throw new Error(CONSTANTS.ERROR_INVALID_LOTTO_NUMBER_COUNT); + } + const uniqueNumbers = new Set(numbers); + if (uniqueNumbers.size !== 6) { + throw new Error(CONSTANTS.ERROR_DUPLICATE_LOTTO_NUMBERS); } } - // TODO: ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + #printNumbers() { + Console.print(`[${this.#numbers.join(", ")}]`); + } + + result(winningNums, bonusNum) { + const res = { cnt: 0, hasBonus: false }; + for (let i = 0; i < CONSTANTS.LOTTO_NUMBERS_COUNT; i++) { + if (this.#numbers.includes(winningNums[i])) { + res.cnt++; + } + } + if (this.#numbers.includes(bonusNum)) res.hasBonus = true; + return res; + } } export default Lotto; diff --git a/src/LottoUtils.js b/src/LottoUtils.js new file mode 100644 index 0000000000..41c60e56be --- /dev/null +++ b/src/LottoUtils.js @@ -0,0 +1,113 @@ +import { Console, Random } from "@woowacourse/mission-utils"; +import Lotto from "./Lotto.js"; +import * as CONSTANTS from "./Constants.js"; + +export async function getValidPurchaseAmount() { + let validPurchaseAmount = false; + let purchaseAmountInput; + + while (!validPurchaseAmount) { + try { + purchaseAmountInput = await Console.readLineAsync( + CONSTANTS.LOTTO_PURCHASE_MESSAGE + ); + if (isNaN(Number(purchaseAmountInput))) { + throw new Error(CONSTANTS.ERROR_INVALID_NUMBER); + } + + if (Number(purchaseAmountInput) % CONSTANTS.LOTTO_TICKET_PRICE !== 0) { + throw new Error(CONSTANTS.ERROR_NOT_IN_1000_UNITS); + } + + validPurchaseAmount = true; + } catch (error) { + Console.print(error.message); + } + } + + return Number(purchaseAmountInput); +} + +export function purchaseLottos(count) { + const lottos = []; + Console.print(`${count}๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค.`); + for (let i = 0; i < count; i++) { + const numbers = Random.pickUniqueNumbersInRange( + 1, + 45, + CONSTANTS.LOTTO_NUMBERS_COUNT + ); + const lotto = new Lotto(numbers); + lottos.push(lotto); + } + + return lottos; +} + +export async function getWinningNumbersAndBonus() { + const winningNumbersInput = await Console.readLineAsync( + CONSTANTS.WINNING_NUMBER_INPUT_MESSAGE + ); + const winningNums = winningNumbersInput + .split(",") + .map((number) => Number(number.trim())); + const bonusNum = await Console.readLineAsync( + CONSTANTS.BONUS_NUMBER_INPUT_MESSAGE + ); + return { winningNums, bonusNum }; +} + +export function countResults(lottos, winningNums, bonusNum, statistics) { + const lottoCnt = lottos.length; + for (let i = 0; i < lottoCnt; i++) { + const res = lottos[i].result(winningNums, bonusNum); + countMatchingNum(res.cnt, statistics); + } + return statistics; +} + +function countMatchingNum(cnt, statistics) { + switch (cnt) { + case 3: + statistics.fifth_prize++; + statistics.totalPrice += CONSTANTS.MATCH_3; + break; + case 4: + statistics.fourth_prize++; + statistics.totalPrice += CONSTANTS.MATCH_4; + break; + case 5: + if (res.hasBonus) { + statistics.second_prize++; + statistics.totalPrice += CONSTANTS.MATCH_5_WITH_BONUS; + break; + } + statistics.third_prize++; + statistics.totalPrice += CONSTANTS.MATCH_5; + break; + case 6: + statistics.first_prize++; + statistics.totalPrice += CONSTANTS.MATCH_6; + break; + default: + break; + } +} + +export function printStatistics(purchaseAmount, statistics) { + const roundedProfitPercentage = ( + (statistics.totalPrice / purchaseAmount) * + 100 + ).toFixed(1); + Console.print(CONSTANTS.LOTTO_STATISTICS_HEADER); + Console.print(`${CONSTANTS.PRIZE_3_MATCH}${statistics.fifth_prize}๊ฐœ`); + Console.print(`${CONSTANTS.PRIZE_4_MATCH}${statistics.fourth_prize}๊ฐœ`); + Console.print(`${CONSTANTS.PRIZE_5_MATCH}${statistics.third_prize}๊ฐœ`); + Console.print( + `${CONSTANTS.PRIZE_5_MATCH_WITH_BONUS}${statistics.second_prize}๊ฐœ` + ); + Console.print(`${CONSTANTS.PRIZE_6_MATCH}${statistics.first_prize}๊ฐœ`); + Console.print( + `${CONSTANTS.TOTAL_PROFIT_PERCENTAGE}${roundedProfitPercentage}%์ž…๋‹ˆ๋‹ค.` + ); +}