From 76874a71a0853f3d1a2c4f8bcee8cdaa5a5b71fd Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 17:02:21 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EB=B9=88=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EC=97=B4=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++++- src/App.js | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 13420b29..c3b2ddbc 100644 --- a/README.md +++ b/README.md @@ -1 +1,7 @@ -# javascript-calculator-precourse \ No newline at end of file +πŸ“ κΈ°λŠ₯ λͺ©λ‘ + +[ ] 빈 λ¬Έμžμ—΄ λ˜λŠ” null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•œλ‹€. +[ ] μ‰Όν‘œ(,) λ˜λŠ” 콜둠(:)을 κ΅¬λΆ„μžλ‘œ κ°€μ§€λŠ” λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. +[ ] μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. +[ ] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. +[ ] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. \ No newline at end of file diff --git a/src/App.js b/src/App.js index 091aa0a5..8501a62d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,4 +1,9 @@ class App { + _calculate(text){ + if(!text){ + return 0; + } + } async run() {} } From 9cbc258f4b90fc544b4beaecedf0c4d250216bb6 Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 17:06:10 +0900 Subject: [PATCH 2/8] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c3b2ddbc..9fae6b2a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ πŸ“ κΈ°λŠ₯ λͺ©λ‘ -[ ] 빈 λ¬Έμžμ—΄ λ˜λŠ” null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•œλ‹€. +[V] 빈 λ¬Έμžμ—΄ λ˜λŠ” null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•œλ‹€. + [ ] μ‰Όν‘œ(,) λ˜λŠ” 콜둠(:)을 κ΅¬λΆ„μžλ‘œ κ°€μ§€λŠ” λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. + [ ] μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. + [ ] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. -[ ] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. \ No newline at end of file + +[ ] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. From 57f6f0e8cb06660bcd165280ff0e4f60bfb16f8e Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 21:29:49 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84=EC=9E=90=20=EB=8D=A7=EC=85=88=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/App.js b/src/App.js index 8501a62d..fba9fbf9 100644 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,8 @@ class App { if(!text){ return 0; } + const numbers=text.split(/[,:]/).map(Number); + return numbers.reduce((sum,num)=>sum+num,0); } async run() {} } From 4c472a9cf2c3e315ff23e78f40d8101013a4a555 Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 21:39:24 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=BB=A4=EC=8A=A4=ED=85=80=20?= =?UTF-8?q?=EA=B5=AC=EB=B6=84=EC=9E=90=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/App.js | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9fae6b2a..ab444321 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [V] 빈 λ¬Έμžμ—΄ λ˜λŠ” null 값을 μž…λ ₯ν•  경우 0을 λ°˜ν™˜ν•œλ‹€. -[ ] μ‰Όν‘œ(,) λ˜λŠ” 콜둠(:)을 κ΅¬λΆ„μžλ‘œ κ°€μ§€λŠ” λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. +[V] μ‰Όν‘œ(,) λ˜λŠ” 콜둠(:)을 κ΅¬λΆ„μžλ‘œ κ°€μ§€λŠ” λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. -[ ] μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. +[V] μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. [ ] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. diff --git a/src/App.js b/src/App.js index fba9fbf9..e8f922f1 100644 --- a/src/App.js +++ b/src/App.js @@ -3,8 +3,18 @@ class App { if(!text){ return 0; } - const numbers=text.split(/[,:]/).map(Number); - return numbers.reduce((sum,num)=>sum+num,0); + let delimiter=/[,\:]/; + let numberString=text; + + const customDelimiter=text.match(/^\/\/(.)\n(.*)/s); + if(customDelimiter){ + delimiter=new RegExp(customDelimiter[1]); + numberString=customDelimiter[2]; + } + + const numbers = numberString.split(delimiter).map(Number); + const sum=numbers.reduce((sum,num)=>sum+num,0); + return sum; } async run() {} } From 05569f6ec534e112ae8def39f21886ef2c65719f Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 21:43:30 +0900 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84(?= =?UTF-8?q?=EC=88=AB=EC=9E=90=EA=B0=80=20=EC=95=84=EB=8B=8C=20=EA=B0=92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/App.js | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ab444321..0a295680 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,6 @@ [V] μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ§€μ •ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 합을 κ³„μ‚°ν•œλ‹€. -[ ] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. +[V] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. [ ] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. diff --git a/src/App.js b/src/App.js index e8f922f1..808ffa7b 100644 --- a/src/App.js +++ b/src/App.js @@ -13,7 +13,12 @@ class App { } const numbers = numberString.split(delimiter).map(Number); - const sum=numbers.reduce((sum,num)=>sum+num,0); + const sum=numbers.reduce((sum,num)=>{ + if(isNaN(num)){ + throw new Error('[ERROR] μœ νš¨ν•˜μ§€ μ•Šμ€ μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€'); + } + return sum+num; + },0); return sum; } async run() {} From ba6f0b9313b8eec42322ea8854e35af6536e6aa6 Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 21:45:11 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84(?= =?UTF-8?q?=EC=9D=8C=EC=88=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/App.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a295680..5012575b 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ [V] μž…λ ₯값에 μˆ«μžκ°€ μ•„λ‹Œ κ°’ λ˜λŠ” μŒμˆ˜κ°€ ν¬ν•¨λœ 경우 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. -[ ] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. +[V] μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. diff --git a/src/App.js b/src/App.js index 808ffa7b..38fdc7da 100644 --- a/src/App.js +++ b/src/App.js @@ -17,6 +17,9 @@ class App { if(isNaN(num)){ throw new Error('[ERROR] μœ νš¨ν•˜μ§€ μ•Šμ€ μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€'); } + if (num < 0) { + throw new Error('[ERROR] μŒμˆ˜λŠ” μž…λ ₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€'); + } return sum+num; },0); return sum; From 629d48cb765af4937478c3aba33254c7cfb69046 Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 23:48:25 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=EC=9E=85=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20=EC=88=98=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 14 ++++++++++++- src/tempCodeRunnerFile.js | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/tempCodeRunnerFile.js diff --git a/src/App.js b/src/App.js index 38fdc7da..a8a8430b 100644 --- a/src/App.js +++ b/src/App.js @@ -1,3 +1,5 @@ +import { Console } from '@woowacourse/mission-utils'; + class App { _calculate(text){ if(!text){ @@ -24,7 +26,17 @@ class App { },0); return sum; } - async run() {} + + async run() { + try { + const input = await Console.readLineAsync('λ§μ…ˆν•  λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”.\n'); + const result = this._calculate(input); + Console.print(`κ²°κ³Ό : ${result}`); + } catch (error) { + Console.print(error.message); + throw error; + } + } } export default App; diff --git a/src/tempCodeRunnerFile.js b/src/tempCodeRunnerFile.js new file mode 100644 index 00000000..a8a8430b --- /dev/null +++ b/src/tempCodeRunnerFile.js @@ -0,0 +1,42 @@ +import { Console } from '@woowacourse/mission-utils'; + +class App { + _calculate(text){ + if(!text){ + return 0; + } + let delimiter=/[,\:]/; + let numberString=text; + + const customDelimiter=text.match(/^\/\/(.)\n(.*)/s); + if(customDelimiter){ + delimiter=new RegExp(customDelimiter[1]); + numberString=customDelimiter[2]; + } + + const numbers = numberString.split(delimiter).map(Number); + const sum=numbers.reduce((sum,num)=>{ + if(isNaN(num)){ + throw new Error('[ERROR] μœ νš¨ν•˜μ§€ μ•Šμ€ μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€'); + } + if (num < 0) { + throw new Error('[ERROR] μŒμˆ˜λŠ” μž…λ ₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€'); + } + return sum+num; + },0); + return sum; + } + + async run() { + try { + const input = await Console.readLineAsync('λ§μ…ˆν•  λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”.\n'); + const result = this._calculate(input); + Console.print(`κ²°κ³Ό : ${result}`); + } catch (error) { + Console.print(error.message); + throw error; + } + } +} + +export default App; From c16ca730e6e0b42712e2dcc56dca1fad05b73024 Mon Sep 17 00:00:00 2001 From: TechNing39 Date: Mon, 20 Oct 2025 23:58:37 +0900 Subject: [PATCH 8/8] =?UTF-8?q?style:=20=EB=9D=84=EC=96=B4=EC=93=B0?= =?UTF-8?q?=EA=B8=B0=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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index a8a8430b..c2017d3c 100644 --- a/src/App.js +++ b/src/App.js @@ -29,7 +29,7 @@ class App { async run() { try { - const input = await Console.readLineAsync('λ§μ…ˆν•  λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ£Όμ„Έμš”.\n'); + const input = await Console.readLineAsync('λ§μ…ˆν•  λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄ μ£Όμ„Έμš”.\n'); const result = this._calculate(input); Console.print(`κ²°κ³Ό : ${result}`); } catch (error) {