ν리μ½μ€ 4μ£Όμ°¨κΉμ§μ νΌλλ°± μ¬ν λͺ¨λ λ°μνκΈ°
μ²μ μ«μ μΌκ΅¬ λ―Έμ μ μνν λλ κΈ°λ₯ λͺ©λ‘ μμ±μ μ λ§ λ§μ λ Έλ ₯μ λ€μμλ€. κΈ°λ₯ λͺ©λ‘ λΏλ§ μλλΌ κ΅¬μ²΄μ μΈ κ΅¬ν λ°©ν₯μ±λ μ€μ νλ λ± μΆν μμ κ°λ₯ν λ΄μ© λ§μ λ λͺ¨λ μμ±νμλ€.
λ³κ²½ κ°λ₯ν λ΄μ©μ μ λ κ²μ μ΅λν μ€μ΄κ³ μμνκ² κΈ°λ₯ λͺ©λ‘κ³Ό μμΈ μ¬νλ§μ μ λλ‘ λ Έλ ₯νλ€.
κΈ°λ₯ λͺ©λ‘μΌλ‘ μ²μ μμ±νλ λ΄μ©μ΄λ€. μ«μ μΌκ΅¬ νλ‘κ·Έλ¨μ νλ¦μ λ³΄κ³ κ°μ₯ νμν κ² κ°μ λͺ©λ‘μ μμ±νλ€. νλ‘κ·Έλ¨μ μμ±νλ μ€ κ³μν΄μ μΆκ°μ μΈ κΈ°λ₯λ€μ΄ νμν¨μ λκΌκ³ , μ¬λ¬λ²μ λͺ©λ‘ μΆκ°λ₯Ό κ±°μ³ λ€μκ³Ό κ°μ κΈ°λ₯ λͺ©λ‘μΌλ‘ λ³ννκ² λμλ€.
4μ£Όμ°¨ λ―Έμ μ μνν λ λΉμ¦λμ€ λ‘μ§κ³Ό UI λ‘μ§μ λΆλ¦¬νκ³ , κ°μ²΄λ₯Ό κ°μ²΄λ΅κ² μ¬μ©ν΄λ³΄κΈ° μν΄ MVC ν¨ν΄μ μ μ©νμλ€. λͺ¨λΈμ ν΅ν΄ κ°μ κ΄λ¦¬νκ³ , λ·°λ₯Ό ν΅ν΄ UIλ₯Ό ꡬμ±νλ€.
λ¨Όμ μ«μ μΌκ΅¬μ μ¬μ©λλ κ°λ€μ μ 리ν΄λ³΄μλ€.
- μ»΄ν¨ν°κ° μμ±νλ λλ€ μ«μ (μ λ΅ κ°)
- μ μ κ° μ λ ₯νλ μ«μ
- λ³Ό, μ€νΈλΌμ΄ν¬ κ°μ
- ννΈ λ¬Έκ΅¬
- ex) "1μ€νΈλΌμ΄ν¬", "2λ³Ό", "1λ³Ό 2μ€νΈλΌμ΄ν¬"- μ μ κ° μ λ ₯νλ μ¬μμ μ¬λΆ
βμ»΄ν¨ν°κ° μμ±νλ λλ€ μ«μ (μ λ΅ κ°)
μ μ κ° μ λ΅μ λ§μΆκΈ° μ κΉμ§ κ·Έ κ°μ λ³κ²½λμ§ μκ³ κΈ°μ΅ λμ΄μΌ νλ€. λ, μ μ κ° μ λ΅μ λ§μ·μ λ μ¬μμμ μνλ€λ©΄ μλ‘μ΄ κ°μΌλ‘ λ³κ²½λμ΄μΌ νλ€. μ΄ κ°μ λ°λ‘ μ μ₯νμ§ μκ³ νμν λλ§λ€ μμ±ν΄μ μ¬μ©νλ€λ©΄ λ‘μ§μ΄ 볡μ‘ν΄μ§ κ² κ°μ λͺ¨λΈμμ κ΄λ¦¬νλλ‘ νλ€.
βμ μ κ° μ λ ₯νλ μ«μ
μ μ κ° μ λ΅μ λ§μΆκΈ° μ κΉμ§ μ μ κ° μ λ ₯νλ μ«μλ κ³μν΄μ λ³κ²½λ κ²μ΄λ€. λ°λΌμ μ΄ κ°μ μ μ₯νμ¬ νμν κ°λ€μ κ³μ°νκΈ°λ³΄λ€ μ λ ₯μ΄ λ°μν λλ§λ€ κ·Έ κ°μ ν΅ν΄ νμν κ°λ€μ κ³μ°νλλ‘ νλ€.
βλ³Ό, μ€νΈλΌμ΄ν¬ κ°μ
μ΄ λν μ μ μ μ λ ₯κ°μ΄ λ³κ²½λ¨μ λ°λΌ κ³μν΄μ λ³κ²½λλ κ°μ΄λ€. λ°λΌμ μ΄ κ°λ μ μ₯νμ§ μκ³ μ μ μ μ λ ₯μ΄ λ°μν λλ§λ€ κ³μ°νλλ‘ νλ€.
βννΈ λ¬Έκ΅¬
ννΈ λ¬Έκ΅¬ λν μμ λ³Ό, μ€νΈλΌμ΄ν¬ κ°μμ κ°μ μ΄μ λ‘ μ μ μ μ λ ₯μ΄ λ°μν λλ§λ€ κ³μ°νλλ‘ νλ€.
βμ μ κ° μ λ ₯νλ μ¬μμ μ¬λΆ
μ μ μ μ¬μμ μ¬λΆλ κ²μμ΄ μ’ λ£λμμ μμ μ λ¨ νλ²λ§ μ¬μ©λλ κ°μ΄λ€. λ°λΌμ μ΄λ₯Ό μ μ₯νμ§ μκ³ , μ λ ₯μ΄ λ°μνμ λ μ¬μμμ νλ¨νλ κ²μ λ‘μ§μ΄ μ€νλλλ‘ νλ€.
μ΅μ’
μ μΌλ‘ λͺ¨λΈμ μ μ₯ν κ°μ μ»΄ν¨ν°κ° μμ±νλ λλ€ μ«μ
νλλ‘ κ²°μ νλ€.
λ¨Όμ μ£Όμ΄μ§ μ«μ μΌκ΅¬μ μμλ₯Ό 보μ.
μ«μ μΌκ΅¬ κ²μμ μμν©λλ€.
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 123
1λ³Ό 1μ€νΈλΌμ΄ν¬
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 145
1λ³Ό
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 671
2λ³Ό
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 216
1μ€νΈλΌμ΄ν¬
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 713
3μ€νΈλΌμ΄ν¬
3κ°μ μ«μλ₯Ό λͺ¨λ λ§νμ
¨μ΅λλ€! κ²μ μ’
λ£
κ²μμ μλ‘ μμνλ €λ©΄ 1, μ’
λ£νλ €λ©΄ 2λ₯Ό μ
λ ₯νμΈμ.
1
μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : 123
1λ³Ό
...
μμλ₯Ό ν΅ν΄ νμν UI λ‘μ§μ μ 리ν΄λ³΄μλ€.
- μ μ μ«μ μ λ ₯ κΈ°λ₯
- μ¬μμ μ¬λΆ μ λ ₯ κΈ°λ₯
- ννΈ μΆλ ₯ κΈ°λ₯
- μμ, μ’ λ£ λ¬Έκ΅¬ μΆλ ₯ κΈ°λ₯
μ
λ ₯ κΈ°λ₯ λ κ°μ§λ μ½λ°± ν¨μλ₯Ό μ΄μ©νμ¬ InputView
κ°μ²΄μμ μ²λ¦¬νλλ‘ νλ€.
function readUserNumber(callback) {
Console.readLine(GuideString.INPUT_NUMBER, (input) => {
InputView.validateUserNumber(input);
callback(input);
});
},
function readRestartCommand(callback) {
Console.readLine(GuideString.RESTART, (input) => {
InputView.validateRestartCommand(input);
callback(input);
});
}
μΆλ ₯κΈ°λ₯ μ€ ννΈλ₯Ό μΆλ ₯νλ κΈ°λ₯μ λ€μκ³Ό κ°μ κ²½μ°μ μκ° μ‘΄μ¬νλ€.
- λ³Όλ§ μλ κ²½μ°
- μ€νΈλΌμ΄ν¬λ§ μλ κ²½μ°
- λ³Ό, μ€νΈλΌμ΄ν¬ λͺ¨λ μλ κ²½μ°
- λ³Ό, μ€νΈλΌμ΄ν¬ λͺ¨λ μλ κ²½μ°
Output
κ°μ²΄μμ λ³Ό, μ€νΈλΌμ΄ν¬ κ°μλ₯Ό μΈμλ‘ λ°μ μ 4κ°μ§ κ²½μ°μ λ°λΌ ννΈλ₯Ό μΆλ ₯νλ ν¨μλ₯Ό μΆκ°νλ€.
4κ°μ§ κ²½μ° μ€ 3λ²μ κ²½μ°μ λ³Ό, μ€νΈλΌμ΄ν¬ ννΈ μ¬μ΄μ 곡백μ μΆκ°νμ¬ μΆλ ₯ν΄μΌ νλ―λ‘ λ€λ₯Έ 3κ°μ§ κ²½μ°μ μΆλ ₯ λ°©μμ΄ λ¬λΌμ§κ² λλ€.
μ΄λ₯Ό join
λ©μλλ₯Ό νμ©νμ¬ λ€μκ³Ό κ°μ΄ ν΄κ²°νλ€.
printHintString(strikeCount, ballCount) {
const hint = [];
if (ballCount !== 0) hint.push(`${ballCount}λ³Ό`);
if (strikeCount !== 0) hint.push(`${strikeCount}μ€νΈλΌμ΄ν¬`);
if (ballCount === 0 && strikeCount === 0) hint.push(`λ«μ±`);
Console.print(hint.join(" "));
},
λͺ¨λΈμ μ λ΅ κ° νλ, λ³Ό κ°μμ μ€νΈλΌμ΄ν¬ κ°μλ₯Ό κ°κ° λ°νν΄μ£Όλ λ©μλ, μ λ΅ κ°μ κ΅μ²΄νλ λ©μλλ₯Ό κ°μ§κ³ μλ€. 컨νΈλ‘€λ¬μμλ μ΄λ₯Ό μ΄μ©ν΄ λ€μμ λ‘μ§μ μννλ€.
- μ λ΅ κ° μμ±
- μ μ μ λ ₯μ λ°λ₯Έ ννΈ μΆλ ₯
1. λ·°μ μ μ μ λ ₯ λ©μλ νΈμΆ
- λͺ¨λΈμ λ³Ό μ€νΈλΌμ΄ν¬ κ°μ μ°μΆ λ©μλ νΈμΆ
- λ·°μ ννΈ μΆλ ₯ λ©μλ νΈμΆ
- μ€νΈλΌμ΄ν¬ κ°μμ λ°λΌ λ©μλ νΈμΆ
1. 3μ€νΈλΌμ΄ν¬ => λ·°μ μ¬μμ μ¬λΆ μ λ ₯ λ©μλ νΈμΆ
- !3μ€νΈλΌμ΄ν¬ => λ·°μ μ μ μ λ ₯ λ©μλ νΈμΆ
- μ¬μμ μ¬λΆμ λ°λΌ λ©μλ νΈμΆ
1. 1 μ λ ₯ (μ¬μμ) => λͺ¨λΈμ μ λ΅ κ΅μ²΄ λ©μλ νΈμΆ, λ·°μ μ μ μ λ ₯ λ©μλ νΈμΆ
- 2 μ λ ₯ (μ’ λ£) =>
Console
λͺ¨λμclose
λ©μλ νΈμΆ
μμμ 보λ κ²κ³Ό κ°μ΄ 컨νΈλ‘€λ¬λ λͺ¨λΈκ³Ό λ·°μ λ©μλλ₯Ό λ‘μ§μ λ§κ² νΈμΆνμ¬ κ²μμ μ§ννλ μν μ μννλλ‘ μμ±νλ€.
νΌλλ°± μ¬νμ ν¬ν¨λμ΄ μμμ§λ§ μ΅κ·ΌκΉμ§ λλ μμ μ¬μ©μ μ΄μ λ₯Ό λͺ νν μ€λͺ ν μ μμλ€. κ·Έλ¬λ€ μ°ν μ½ ν¬λ£¨λ€μ΄ νμ΅ν λ΄μ©μ μ 리, 곡μ νλ Tecobleμ νλ μ½λ©μ νΌν΄λΌμ μ½κ³ κ·Έ ν΄λ΅μ μ»μ μ μμλ€.
κ°λ¨ν λ§νμλ©΄ μμλ₯Ό μ¬μ©νλ©΄ ν΄λΉ μμΉμ μλ―Έλ₯Ό μ½κ² νμ ν μ μκ³ , λ³κ²½μ μ μ°νκ² λμ²ν μ μκ² λλ€. λ°λΌμ μ΄λ²μ μ«μμΌκ΅¬μμ μ΄λ₯Ό μ μ©ν΄λ³΄κ³ μ νλ€.
ν리μ½μ€ λ―Έμ μμ μ«μ μΌκ΅¬λ 3κ°μ μ«μλ₯Ό λ§μΆλ κ²μμ΄μλ€. μ΄λ μ΄ 3κ°μ μ«μλ₯Ό κ²°μ νλ 3μ΄λ μ«μλ₯Ό λ³κ²½νλ©΄ 3κ° μ΄μμ μ¬λ¬κ°μ§ μ«μλ₯Ό λ§μΆλ μ«μ μΌκ΅¬λ‘ κ²μμ΄ λ°λ μ μλ€.
μ΄λ₯Ό μ μ©ν΄λ³΄κ³ μ /constants/Constant.js
μ numberSize
λΌλ μμλ₯Ό μ μΈν΄λκ³ , μ΄λ₯Ό μ¬μ©νλλ‘ μ½λλ₯Ό μμ±νλ€.
// λλ€ κ° μμ± ν¨μ
function generateRandomNumber(size) {
const randomNumbers = [];
while (randomNumbers.length < size) {
const newRandomNumber = Random.pickNumberInRange(1, 9);
if (!randomNumbers.includes(newRandomNumber))
randomNumbers.push(newRandomNumber);
}
return randomNumbers;
}
// λλ€ κ° μμ± ν¨μ μ¬μ©
generateRandomNumber(numberSize);
μ ν¨μλ λλ€ μ«μλ₯Ό μμ±νλ ν¨μμ΄λ€. size
λ₯Ό μ
λ ₯ λ°μ κ·Έ κ°μ λ§νΌμ λλ€ν μ«μλ₯Ό μμ±ν΄μ£Όλ μν μ μννλ€. μ΄λ₯Ό νΈμΆν λ numberSize
λ₯Ό μ¬μ©νλλ‘ νλ€.
// μμ λ³κ²½μ λ°λΌ μΆλ ₯ 문ꡬ λ³κ²½
const numberSize = 3;
const GuideString = Object.freeze({
START: "μ«μ μΌκ΅¬ κ²μμ μμν©λλ€.",
INPUT_NUMBER: "μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ : ",
RESTART: "κ²μμ μλ‘ μμνλ €λ©΄ 1, μ’
λ£νλ €λ©΄ 2λ₯Ό μ
λ ₯νμΈμ.\n",
END: `${numberSize}κ°μ μ«μλ₯Ό λͺ¨λ λ§νμ
¨μ΅λλ€! κ²μ μ’
λ£`,
});
const ErrorString = Object.freeze({
USER_NUMBER_LENGTH_ERROR: `μ
λ ₯κ°μ κ°μκ° μ ν¨νμ§ μμ΅λλ€. ${numberSize}κ°μ μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ.`,
USER_NUMBER_NOT_NUMBER_ERROR: `μ
λ ₯κ°μ μ«μκ° μλ λ€λ₯Έ κ°μ΄ ν¬ν¨λΌμμ΅λλ€. μ«μλ§ μ
λ ₯ν΄μ£ΌμΈμ.`,
USER_NUMBER_DUPLICATE_ERROR: `μ
λ ₯κ°μ μ€λ³΅μ΄ ν¬ν¨λΌμμ΅λλ€. μ€λ³΅λμ§ μλ μ«μλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ.`,
RESTART_COMMAND_NOT_COMMAND_ERROR: `μ
λ ₯κ°μ 1, 2κ° μλ λ€λ₯Έ κ°μ΄ ν¬ν¨λΌμμ΅λλ€. 1κ³Ό 2μ€ νλλ₯Ό μ νν΄ μ
λ ₯ν΄μ£ΌμΈμ.`,
RESTART_COMMAND_LENGTH_ERROR: `μ
λ ₯κ°μ κ°μκ° μ ν¨νμ§ μμ΅λλ€. 1κ³Ό 2μ€ νλλ₯Ό μ νν΄ μ
λ ₯ν΄μ£ΌμΈμ.`,
});
μ κ°μ²΄λ€μ μΆλ ₯ 문ꡬλ₯Ό λͺ¨μλμ κ°μ²΄μ΄λ€. numberSize
μ λ°λΌ μ λ΅ κ°μ κ°μκ° λ¬λΌμ§λ―λ‘ κ·Έμ λ°λ₯Έ μΆλ ₯ 문ꡬλ₯Ό μ μ₯νκ² λλ€.
if (input.length !== numberSize)
throw new Error(ErrorString.USER_NUMBER_LENGTH_ERROR);
μ ν¨μλ μ¬μ©μμ μ
λ ₯κ°μ μ ν¨μ±μ κ²μ¬νλ ν¨μμ 쑰건 μΌλΆμ΄λ€. μ΄ ν¨μλ μ
λ ₯κ°μ΄ numberSize
μ κ°μ§ μλ€λ©΄ μλ¬λ₯Ό λ°μμν€λ μν μ μννλ€.
function handleInputOrEnd(strikeCount, ballCount) {
printHintString(strikeCount, ballCount);
if (strikeCount === numberSize) {
printEndString();
return this.inputRestartCommand();
}
return this.inputUserNumber();
}
μ ν¨μλ 컨νΈλ‘€λ¬μ κ²μ μ§νμ κ²°μ νλ λ©μλμ΄λ€. μ΄ λ©μλλ μ€νΈλΌμ΄ν¬ κ°μκ° numberSize
μ κ°μμ§λ©΄ λ·°μ μ¬μμ μ¬λΆ μ
λ ₯ λ©μλλ₯Ό νΈμΆνλ μν μ μννλ€.
βμμλ₯Ό μ¬μ©νλ μ΄μ λ μ’ λ νμ΅ν λ€μ λλ§μ μΈμ΄λ‘ μμΈν μ λ¦¬ν΄ λ³Ό κ³νμ΄λ€.
μ«μ μΌκ΅¬λ μ§λ ν리μ½μ€ 2μ£Όμ°¨μ μ΄λ―Έ μμ±νλ λ―Έμ μ΄μ΄μ μμ§ν λ€μ μμν λ μ΄κ² μΌλ§λ λμμ΄ λ κΉ μμ¬μ νμλ€. νμ§λ§ μ§λ νΌλλ°±μ λͺ¨λ λ°μνμ¬ μ½λλ₯Ό μμ±νλ©° μ΄μ μ μννλ κ²λ€μ΄ μ§μ§ λ΄ κ²μ΄ λλ κ³Όμ μ κ²½ννλ€. λ νΉμ λͺ¨λ₯Ό μ΅μ’ ν μ€νΈλ₯Ό λλΉνμ¬ μνν΄λ³Έ λ§νΌ μ΅μ’ ν μ€νΈμ κ°κ² λλ€λ©΄ μ΄λ² κ²½νμ ν΅ν΄ μ‘°κΈ λ μμ μκ² ν μ€νΈλ₯Ό μνν μ μμ κ² κ°λ€.
μ 체 μ½λλ λ€μ λ§ν¬λ₯Ό ν΅ν΄ νμΈν΄λ³Ό μ μλ€.