๐ ๋ฆฌํฉํฐ๋ง 2ํ ๋ฆฌ๋ทฐ: Intro, 1์ฅ
๐ ๋ฆฌํฉํฐ๋ง 2ํ : ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ฐ์ ํ์ฌ ํจ์จ์ ์ธ ๋ฆฌํฉํฐ๋ง ๊ตฌํํ๊ธฐ ๋ฆฌ๋ทฐ
๋ฆฌํฉํฐ๋ง 2ํ์ Intro์ 1์ฅ์ ์ฝ๊ณ ์์ต๋๋ค. ์์ ์ฝ๋๊ฐ ๋ง์์ ๊ทธ๋ฅ ํ์ด๋ด์๋ ๊ธ๋ฐฉ ์ดํด๊ฐ ๋์ง ์์ ํ๋ํ๋ ํ์ดํํ๋ฉฐ ์ฝ์ด๋ดค๋๋ ์ด๋์ ๋ ์ดํด๊ฐ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ถ์ ์ฝ๋ ์๊ฐ์ ์กฐ๊ธ ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค. ๐
๋์ค์ ์ ๊ฐ ๋ค์ ์ฐพ์๋ณด๊ธฐ ์ฝ๊ฒ๋ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค ์ถ์ด ๋ณด๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํ๋ฉฐ ๊ณต๋ถ์ค์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋๋ ์ฑ
์ ์ฝ์ผ๋ฉด์ ๊ฐ์ธ ํ ์ด ํ๋ก์ ํธ์ ๋ฆฌํฉํฐ๋ง๋ ๋ณํํ๋ ค๊ณ ํ๋๋ฐ, ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฌ๊ฒ ์ง๋ง ์ฑ
์ ๋๊น์ง ์ ๋
ํ๊ณ ์งํํ๊ธฐ๋ก ๋ง์์ ๋๋ ธ์ต๋๋ค.
๊ทธ๋ผ ์ด์ ๊ฐ์คํ๊ณ , ๋ฆฌํฉํฐ๋ง 2ํ์ Intro์ 1์ฅ์ ๋ฆฌ๋ทฐ๋ฅผ ์์ํด๋ณด๊ฒ ์ต๋๋ค.
โญ๏ธ Intro
Intro์์๋ ํ์(๋งํด ํ์ธ๋ฌ)๊ฐ ์ปจ์คํดํธ๋ก์ ํ๋ก์ ํธ ํ์ฅ์๊ฒ ๋ฆฌํฉํฐ๋ง์ ๊ถํ์ผ๋ ํ์ฅ์ด ์ด๋ฅผ ๊ฐ๊ณผํ ๊ฒฐ๊ณผ, 6๊ฐ์ ํ ํด๋น ํ๋ก์ ํธ๊ฐ ์์ ํ ๋งํ๋ ์ผํ๋ฅผ ์๊ฐํฉ๋๋ค. ๋ฆฌํฉํฐ๋ง์ ์์์ ์ค์์ฑ์ ๋ํด ๊ฐ๋จํ ์์๋ณด๋ ์ฑํฐ์์ต๋๋ค. ์ค๋ฌด์์ ๋ฆฌํฉํฐ๋ง์ด ์ผ๋ง๋ ์ค์ํ์ง ์ค์ ์ฌ๋ก๋ฅผ ํตํด ์ ์ ์์์ต๋๋ค.
โญ๏ธ 1์ฅ ๋ฆฌํฉํฐ๋ง: ์ฒซ๋ฒ์งธ ์์
1์ฅ์์๋ ์๋์ ์์ ์ฝ๋๋ฅผ ํ์์ ์คํ์ผ๋ก ๋ฆฌํฉํฐ๋งํ๋ ๊ฒ์ ๋ณด๋ฉฐ ๋ฆฌํฉํฐ๋ง์ ์ด๋ป๊ฒ ์ํํ๋์ง ๊ฐ์ ์ก์๋ณด๋ ์๊ฐ์ ๊ฐ์ง๋๋ค.
function statement(invoice, plays) {
let totalAmount = 0;
let volumeCredits = 0;
let result = `์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customer})\n`;
const format = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2,
}).format;
for (let perf of invoice.performances) {
const play = plays[perf.playID];
let thisAmount = 0;
switch (play.type) {
case 'tragedy': // ๋น๊ทน
thisAmount = 40000;
if (perf.audience > 30) {
thisAmount += 1000 * (perf.audience - 30);
}
break;
case 'comedy': // ํฌ๊ทน
thisAmount = 30000;
if (perf.audience > 20) {
thisAmount += 10000 + 500 * (perf.audience - 20);
}
thisAmount += 300 * perf.audience;
break;
default:
throw new Error(`์ ์ ์๋ ์ฅ๋ฅด: ${play.type}`);
}
// ํฌ์ธํธ๋ฅผ ์ ๋ฆฝํ๋ค.
volumeCredits += Math.max(perf.audience - 30, 0);
// ํฌ๊ทน ๊ด๊ฐ 5๋ช
๋ง๋ค ์ถ๊ฐ ํฌ์ธํธ๋ฅผ ์ ๊ณตํ๋ค.
if (play.type === 'comedy') volumeCredits += Math.floor(perf.audience / 5);
// ์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += ` ${play.name}: ${format(thisAmount / 100)} (${
perf.audience
}์)\n`;
totalAmount += thisAmount;
}
result += `์ด์ก: ${format(totalAmount / 100)}\n`;
result += `์ ๋ฆฝ ํฌ์ธํธ: ${volumeCredits}์ \n`;
return result;
}
์ด๋ณด์์ธ ์ ๊ฐ ์์ ์ฝ๋๋ฅผ ๋ดค์ ๋ ๋๋ ์๊ฐ์ 'statement() ํจ์๊ฐ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ์ํํ๊ณ ์๋ ๊ฒ ๊ฐ์๋ฐ? ์ฌ๊ธฐ์ ๊ธฐ๋ฅ๋ณ๋ก ์ชผ๊ฐค ์ ์๋ ๋ถ๋ถ๋ค๋ง ์ชผ๊ฐ์ฃผ๋ฉด ์ข๊ฒ ๋ค.' ์ ๋์์ต๋๋ค.
ํ๋ ํ์๋ ์์ ์งง์ ์ฝ๋๋ฅผ ๋ค์ํ ๋ฆฌํฉํฐ๋ง ๊ธฐ๋ฒ์ ํตํด ์ ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ๊ฝค ๊ธธ์ด์ก์ง๋ง ๋งค์ฐ ์๊ฒ ๋๋, ์์ ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ๋ง๋ค์ด๋ ๋๋ค. ์๊ฐ๋ณด๋ค ๋ ์๊ฒ ์๊ฒ ๋๋๋๋ค. ์ค๊ฐ์ ๋์ค๋ ์๊ธฐ์ด์ง๋ง ํ๋ก๊ทธ๋๋ฐ์์๋งํผ์ ๊ฐ๊ฒฐํจ๋ณด๋ค ๋ช ๋ฃํจ์ด ์งํํ ์ ์๋ ์ํํธ์จ์ด์ ์ ์๋ผ๊ณ ํฉ๋๋ค. ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ ์ ๋ก ๊ณ ๊ฐ๊ฐ ๋๋์ฌ์ก์ต๋๋ค.
๋ฆฌํฉํฐ๋ง์ ์งํํ๋ฉฐ ํ์๊ฐ ๋์์ด ๊ฐ์กฐํ ๊ฒ์ ํ ์คํธ์์ต๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ๋ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ์ง๋ง, ์ ๊ฒฝ ์จ์ ๋ง๋ค์ด๋๋ฉด ๋๋ฒ๊น ์๊ฐ์ด ์ค์ด ์ ์ฒด ์์ ์๊ฐ์ ์คํ๋ ค ๋จ์ถ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ํ ํ๋์ ๋ฆฌํฉํฐ๋ง์ ๋๋ผ ๋๋ง๋ค ์ปค๋ฐํด์ผ ์ค๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ผ๋ ์ด์ ์ ์ ์ ์ํ๋ก ๋์๊ฐ ์ ์๋ค๋ ๊ฒ์ ์๊ธฐํ์ต๋๋ค. ์ด๋ ์ ๋ ์๋ฏธ ์๋ ๋จ์๋ก ๋ญ์ณ์ง๋ฉด ๊ณต์ ์ ์ฅ์๋ก ํธ์ํ๋ค๊ณ ํฉ๋๋ค. ํ์๋ ํ๋์ ๋ฆฌํฉํฐ๋ง์ด ๋๋ ๋๋ง๋ค ๊ผญ ์ปดํ์ผ-ํ ์คํธ-์ปค๋ฐ ์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ์ด ๊ณผ์ ์ด ๊ท์ฐฎ์์ ์ํํด์ง๋ฉด ๋์ค์ ์ค์ํ ๋ ์ ์ ์ด ๋ฒ์ฉ ๋ ๋ค๊ณ ํฉ๋๋ค.
๊ทธ ์ธ์๋ ๋ณ์์ ์ด๋ฆ์ ๋ช
ํํ๊ฒ ํ๋ ๋ฒ, ๋ชจ๋ํํ์ฌ ์ค๋ณต์ฝ๋๋ฅผ ์ฐ์ง ์๋ ๋ฒ ๋ฑ๋ฑ ์ค์ ๋ฆฌํฉํฐ๋ง ๊ณผ์ ์ ๋ฐ๋ผ๊ฐ๋ณด๋ฉฐ ๋ฆฌํฉํฐ๋ง์ด ์ด๋ค ๊ฒ์ธ์ง ๊ฐ์ ์ก์ ์ ์๋ ์ข์ ์๊ฐ์ด์์ต๋๋ค.
ํ์๋ ํจ์์ ๋ฐํ ๊ฐ์๋ ํญ์ result๋ผ๋ ์ด๋ฆ์ ์๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ ๋ณ์์ ์ญํ ์ ์ฝ๊ฒ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ธ์์ธ perf๋ aPerformance๋ผ๊ณ ๋ฐ๊ฟ์ฃผ๋ ๋ฑ ๋ช ํํ๊ฒ ๋ฐ๊ฟ์ค๋๋ค. ํ์๋ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ์ ๋์ด๋ก ํ์ ์ด๋ฆ์ ์ ๋๋ฐ, ๋งค๊ฐ๋ณ์์ ์ญํ ์ด ๋๋ ทํ์ง ์์ ๋๋ ๋ถ์ ๊ด์ฌ(a/an)์ ๋ถ์ ๋๋ค.
๐ค ๋๋ ์
๋ฆฌํฉํฐ๋ง ๊ณผ์ ์ ๋ณด๋ฉด์, ์ ๋ง ๊ฐ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ค๋ฉด ์ด๋ ๊ฒ๊น์ง ํ ์ ์๊ตฌ๋ ์ถ์์ต๋๋ค. ๐ณ
๋ฌผ๋ก ๋์ ์๋ฏธ๊ฐ ์๋๋ผ ์ข์ ์๋ฏธ์
๋๋ค. ์์ผ๋ก ๊ฐ๋ฐํ ๋ ๋จ์ํ ๊ธฐ๋ฅ๋ง ์ ๋์๊ฐ๊ฒ ๋๋ฑ๋๋ฑ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ๋ฏธ๋์ ์ ์ง๋ณด์๋น์ฉ์ ์ค์ด๊ธฐ ์ํด ํ์ฌ์ ์๊ฐ์ ๋ฆฌํฉํฐ๋ง๊ณผ ํ
์คํธ์ ๊ผญ ํฌ์ํด์ผ ํ๋ค๋ ๊ฑธ ๋ชธ์ ๋๋ผ๊ฒ ๋์์ต๋๋ค. ์๋ฏธ๋ ๋ค๋ฅด์ง๋ง ๋ง์น ์ด๋ฅธ๋ค์ด ๋์ค์ ๊ณ ์ ์ํ๋ ค๋ฉด ๊ณต๋ถ ์ด์ฌํ ํ๋ผ๋ ๋ง์ ์ ํ์๋์ง ๋ค ์ปค์ ์๊ฒ ๋ ๊ฒ๊ณผ ๋น์ทํ ๋๋์ด์๋ค์..
๋น์ฅ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ ธ์ง๋ง, ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด ํ์คํ ์ฝ๋๋ฅผ ์ฒ์ ๋ณผ ๋ค๋ฅธ ํ์๋ค์ด ๋ณผ ๋๋ ์์ ํ๊ธฐ ์ฝ๊ฒ ๋ฐ๋์์ต๋๋ค. ํ์์ ๋ง๋๋ก ์ฒ์๋ถํฐ ๋ฆฌํฉํฐ๋ง์ ๊ฐ๋ ๋ง ์๋ ค์ค๋ค๋ฉด ๋ฆฌํฉํฐ๋ง์ด ์ด๋ค ๊ฒ์ด๊ณ , ์ ํ์ํ์ง ๋๋์ด ์ค์ง ์์์ํ ๋ฐ ์์๋ฅผ ๋ณด๋ฉด์ ๋ฐ๋ผ๊ฐ๋ค๋ณด๋ ๋ช ํํด์ก์ต๋๋ค.
๋ค๋ง ์ฑ ์ ๋ณด๋ฉด์ ์กฐ๊ธ ์ด๋ ค์ ๋ ์ ์ ํ์์ ๋ฆฌํฉํฐ๋ง ๊ธฐ๋ฒ์ ์์ ๋ง์ ๋จ์ด๋ก ์ค๋ช ํ๋๋ฐ, ๋์ค์ ๋์ค๋ ๋ด์ฉ๋ค์ด๋ผ ๋จ์ด๋ง ๋ณด๊ณ ์๋ ์ด๋ค ์๋ฏธ์ธ์ง ์ดํดํ๊ธฐ ์ฝ์ง ์์๋ค์. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ๊ฐ ์ค์ํ๋ค๊ณ ๊ฐ์กฐํ๋๋ฐ ํ ์คํธ ์ฝ๋๋ ๋ฐ๋ก ๋์ค์ง ์์ ์์ฌ์ ์ต๋๋ค. ๋งค์ฐ ์ค์ํ์ฌ 4์ฅ์์ ํฌ๊ฒ ๋ค๋ฃฌ๋ค๊ณ ํ๋ ๊ทธ ๋ ์ ๋๋ก ๋ฐฐ์์ผ๊ฒ ์ต๋๋ค.
์๋ฌดํผ 2์ฅ์์๋ ๋ฆฌํฉํฐ๋ง ์ ๋ฐ์ ์ ์ฉ๋๋ ์์น๋ค์ ์์๋ณธ๋ค๊ณ ํ๋๋ฐ ๋ฒ์จ๋ถํฐ ๊ธฐ๋๊ฐ ๋ฉ๋๋ค. ์ผ๋ฅธ ๋ค ์ฝ๊ณ ์ ๋ํ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋๋ฉด ์ข๊ฒ ๋ค์.
๋์ผ๋ก ํ์๊ฐ ๊ฐ์กฐํ๋ฉด์๋ ์ ๊ฒ ์ธ์ ๊น์๋ ๊ตฌ๋ฌธ ๋ช๊ฐ์ง๋ฅผ ๊ณต์ ํ๋ฉฐ ๊ธ์ ๋ง์น๊ฒ ์ต๋๋ค.
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ปดํจํฐ๊ฐ ์ดํดํ๋ ์ฝ๋๋ ๋ฐ๋ณด๋ ์์ฑํ ์ ์๋ค.
์ฌ๋์ด ์ดํดํ๋๋ก ์์ฑํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ์ค๋ ฅ์๋ค.
์บ ํ์๋ค์๊ฒ๋ "๋์ฐฉํ์ ๋๋ณด๋ค ๊น๋ํ๊ฒ ์ ๋ํ๊ณ ๋ ๋๋ค"๋ ๊ท์น์ด ์๋ค.
ํ๋ก๊ทธ๋๋ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ํญ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์์ ์์ ์ ๋ณด๋ค
๊ฑด๊ฐํ๊ฒ(healthy) ๋ง๋ค์ด๋๊ณ ๋ ๋์ผ ํ๋ค.
์ข์ ์ฝ๋๋ฅผ ๊ฐ๋ ํ๋ ํ์คํ ๋ฐฉ๋ฒ์ '์ผ๋ง๋ ์์ ํ๊ธฐ ์ฌ์ด๊ฐ' ๋ค.
๊ฑด๊ฐํ ์ฝ๋๋ฒ ์ด์ค๋ ์์ฐ์ฑ์ ๊ทน๋ํํ๊ณ ,
๊ณ ๊ฐ์๊ฒ ํ์ํ ๊ธฐ๋ฅ์ ๋ ๋น ๋ฅด๊ณ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์ ๊ณตํ๋๋ก ํด์ค๋ค.