๐ Self Check ์์ ๋ง๋ค๊ธฐ
์ง๊ธ๊น์ง ์ซ์๋ง ๋งํ๋ฉด ๋ณผ, ์ซ์์ ์๋ฆฟ์๊น์ง ๋ชจ๋ ๋งํ๋ฉด ์คํธ๋ผ์ดํฌ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ซ์๋ฅผ ํ๋๋ ๋งํ์ง ๋ชปํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?

๋ฌธ์ !
์ ๋ต์ด '1357'์ธ๋ฐ '2468'์ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ.
์ง๊ธ๊น์ง์ ํ๋ก๊ทธ๋๋ฐ์์๋ '0๋ณผ 0์คํธ๋ผ์ดํฌ'๋ผ๊ณ ํ์๋๋ค.
์ด ๋์ ์ ์์์ผ๋ก ํ์ํด๋ณด์. ๊ทธ๋ฆฌ๊ณ 3์์์ด ๋๋ฉด ํจ๋ฐฐํ๊ฒ ๋๋ค.
๐ ์์๋
๐ ์ฝ๋
<script>
const $input = document.querySelector('#input');
const $form = document.querySelector('#form');
const $logs = document.querySelector('#logs');
//numbers ๋น ๋ฐฐ์ด ๋ง๋ค๊ณ ๊ทธ ์์ 1~9๊น์ง์ ์ซ์ ๋ฃ๊ธฐ.
const numbers = []; //[1,2,3,4,5,6,7,8,9]
for (let n=0; n<9; n+=1){
numbers.push(n+1);
}
//์ซ์ 4๊ฐ ๋ฝ๊ธฐ.
//answer ๋น ๋ฐฐ์ด ๋ง๋ค๊ณ , numbers ๋ฐฐ์ด๋ก๋ถํฐ ์ซ์๋ฅผ ํ๋์ฉ ๊บผ๋ธ๋ค. 4๋ฒ ๋ฐ๋ณตํ๋ค.
const answer = [];
for (let n=0; n<=3; n+=1){ // 4๋ฒ ๋ฐ๋ณต.
const index = Math.floor(Math.random() * (numbers.length-1)); // 0 ~ 8 ์ ์. (+1 ์ถ๊ฐํ๋ฉด 0 ~ 9 ์ ์.)
answer.push(numbers[index]); //index๋ฅผ ๋ฌด์์๋ก ๋ฝ๊ณ ,numbers[index]๋ก ์ค์ ์ซ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
//๊ทธ๋ฆฌ๊ณ answer ๋ฐฐ์ด์ ๋ฝ์ ์ซ์๋ฅผ ์ถ๊ฐ (push)ํ๋ค.
numbers.splice(index,1); //numbers ๋ฐฐ์ด์์๋ ์ ๊ฑฐ(splice)ํ๋ค.
//(numbers๋ฐฐ์ด์์ ๋ฝ์์ผ๋๊น ์ญ์ ํ๋ ๊ฒ์ด๋ค.)
}
console.log(answer);
console.log(numbers);
const tries = [];
function checkInput(input) {
if (input.length != 4) { //๊ธธ์ด๋ 4๊ฐ ์๋๊ฐ.
return alert('4์๋ฆฌ ์ซ์๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.');
}
if (new Set(input).size != 4) { //์ค๋ณต๋ ์ซ์๊ฐ ์๋๊ฐ.
//new Set์ ์ค๋ณต์ด ์๋ ๋ฐฐ์ด์ด๋ค.
return alert ('์ค๋ณต๋์ง ์๊ฒ ์
๋ ฅํด์ฃผ์ธ์.');
}
if (tries.includes(input)){ //์ด๋ฏธ ์๋ํ ๊ฐ์ ์๋๊ฐ.
return alert ('์ด๋ฏธ ์๋ํ ๊ฐ์
๋๋ค.');
}
return true;
}
let out = 0; //์์
$form.addEventListener('submit',(event)=>{
event.preventDefault(); //ํผ ํ๊ทธ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ๋ ์ฝ๋.
const value = $input.value;
$input.value = ''; //์
๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ค๋ ์ฝ๋. ( ์ซ์๊ฐ ์๋๋ผ ๋ฌธ์์ด๋ก ๊ฐ์ด ๋ค์ด์ด)
//์
๋ ฅํ ๊ฐ์ checkInput ํจ์๋ก ๊ฒ์ฆ.
if (!checkInput(value)){
return; //์
๋ ฅ๊ฐ ๋ฌธ์ ์์ ๋.
}
//์
๋ ฅ๊ฐ ๋ฌธ์ ์์ ๋.
//ํ๋ฐ์ธ์ง ๊ฒ์ฌํ๋ค.
if (answer.join('') === value){ //[3,1,4,6] => '3146' ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ๋ฉ์๋๊ฐ join.
//value ๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ. ์ด๊ฒ์ ์๋ก ๋น๊ตํ๋ ๊ฒ์ด๋ค.
//=== ๋ ๊ฐ๊ณผ ํ์
๋ ๋ค ๊ฒ์ฌํ๋ค. == ๋ ๊ฐ์ ๋น๊ตํ๊ธฐ ์ ์ ํ์
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ํ์
์ ๋ณํ ํ ๊ฐ์ ๋น๊ตํ๋ค.
$logs.textContent = 'ํ๋ฐ';
return;
}
//10๋ฒ ์๋ํ๋๊ฐ.
if (tries.length >= 9){
const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
$logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
return;
}
//๋ช ์คํธ๋ผ์ดํฌ ๋ช ๋ณผ์ธ์ง ๊ฒ์ฌ
let strike = 0;
let ball = 0;
// answer : 3146 , value : 1347
//for๋ฌธ์ ์ด์ฉํ ๋ฐฉ๋ฒ.
// for (let i = 0; i<answer.length; i++){
// const index = value.indexOf(answer[i]);
// if (index > -1) { //์ผ์นํ๋ ์ซ์ ๋ฐ๊ฒฌ. ๊ฒน์น๋ ์ซ์๊ฐ ์์ผ๋ฉด -1๋ณด๋ค ํฌ๋ค. ๊ฒน์น๋ ์ซ์๊ฐ ์์ผ๋ฉด -1.
// //์๋ ์ฝ๋๋ก ๋ณผ๊ณผ ์คํธ๋ผ์ดํฌ๊ฐ ๋๋ ์ง.
// if (index === i){ //์๋ฆฟ์๋ ๊ฐ์.
// strike += 1;
// } else { //์ซ์๋ง ๊ฐ์.
// ball += 1;
// }
// }
// }
// if (strike === 0 && ball === 0){
// out++;
// $logs.append(`${value}:์์`,document.createElement('br'));
// } else {
// //append์ ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ฌธ์์ดand br ํ๊ทธ๋ ๊ฐ์ด ๋ฃ์ ์ ์๋ ๊ฒ์ด๋ค.
// $logs.append(`${value}: ${strike} ์คํธ๋ผ์ดํธ ${ball} ๋ณผ`,document.createElement('br'));
// }
// if (out === 3){
// const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
// $logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
// return;
// }
//๋ฐฐ์ด์ forEach๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ.
answer.forEach((element, i)=>{ //element : answer์ ๊ฐ ์์ / i : ๊ทธ ์์์ ๋ํ ์ธ๋ฑ์ค.
const index = value.indexOf(element);
if(index > -1){ //์ผ์นํ๋ ์ซ์ ๋ฐ๊ฒฌ.
if(index === i){ //์๋ฆฟ์๋ ๊ฐ์.
strike += 1;
} else{ //์ซ์๋ง ๊ฐ์.
ball += 1;
}
}
})
if (strike === 0 && ball === 0){
out++;
$logs.append(`${value}:์์`,document.createElement('br'));
} else {
//append์ ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ฌธ์์ดand br ํ๊ทธ๋ ๊ฐ์ด ๋ฃ์ ์ ์๋ ๊ฒ์ด๋ค.
$logs.append(`${value}: ${strike} ์คํธ๋ผ์ดํธ ${ball} ๋ณผ`,document.createElement('br'));
}
if (out === 3){
const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
$logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
return;
}
tries.push(value);//tries ๋ฐฐ์ด์ ์
๋ ฅํ ๊ฐ์ ์ ์ฅํด์ ์๋ ํ์๋ฅผ 1 ๋๋ ค์ค.
});
</script>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
์๋ ํ์๊ฐ 10๋ฒ์ด ๋์๊ฑฐ๋ 3๋ฒ ์์๋์ด ํจ๋ฐฐํ๋ฉด ํจ๋ฐฐ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ์์ ์ฝ๋๊ฐ ์ค๋ณต์ด ๋๋ค.
์ด๋ฐ ๋ถ๋ถ์ ํจ์๋ก ๋นผ์ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
function defeated(){
const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
$logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
}
let out = 0; //์์
$form.addEventListener('submit',(event)=>{
event.preventDefault(); //ํผ ํ๊ทธ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ๋ ์ฝ๋.
const value = $input.value;
$input.value = ''; //์
๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ค๋ ์ฝ๋. ( ์ซ์๊ฐ ์๋๋ผ ๋ฌธ์์ด๋ก ๊ฐ์ด ๋ค์ด์ด)
.
.
.
//10๋ฒ ์๋ํ๋๊ฐ.
if (tries.length >= 9){
defeated();
return;
}
//๋ช ์คํธ๋ผ์ดํฌ ๋ช ๋ณผ์ธ์ง ๊ฒ์ฌ
let strike = 0;
let ball = 0;
// answer : 3146 , value : 1347
//๋ฐฐ์ด์ forEach๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ.
answer.forEach((element, i)=>{ //element : answer์ ๊ฐ ์์ / i : ๊ทธ ์์์ ๋ํ ์ธ๋ฑ์ค.
const index = value.indexOf(element);
if(index > -1){ //์ผ์นํ๋ ์ซ์ ๋ฐ๊ฒฌ.
if(index === i){ //์๋ฆฟ์๋ ๊ฐ์.
strike += 1;
} else{ //์ซ์๋ง ๊ฐ์.
ball += 1;
}
}
})
if (strike === 0 && ball === 0){
out++;
$logs.append(`${value}:์์`,document.createElement('br'));
} else {
//append์ ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ฌธ์์ดand br ํ๊ทธ๋ ๊ฐ์ด ๋ฃ์ ์ ์๋ ๊ฒ์ด๋ค.
$logs.append(`${value}: ${strike} ์คํธ๋ผ์ดํธ ${ball} ๋ณผ`,document.createElement('br'));
}
if (out === 3){
defeated();
return;
}
tries.push(value);//tries ๋ฐฐ์ด์ ์
๋ ฅํ ๊ฐ์ ์ ์ฅํด์ ์๋ ํ์๋ฅผ 1 ๋๋ ค์ค.
});
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
๐ ์ ์ฒด ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>์ซ์์ผ๊ตฌ ๊ฒ์</title>
</head>
<body>
<form id="form">
<input type="text" id="input">
<button>ํ์ธ</button>
</form>
<div id="logs"></div>
<script>
const $input = document.querySelector('#input');
const $form = document.querySelector('#form');
const $logs = document.querySelector('#logs');
//numbers ๋น ๋ฐฐ์ด ๋ง๋ค๊ณ ๊ทธ ์์ 1~9๊น์ง์ ์ซ์ ๋ฃ๊ธฐ.
const numbers = []; //[1,2,3,4,5,6,7,8,9]
for (let n=0; n<9; n+=1){
numbers.push(n+1);
}
//์ซ์ 4๊ฐ ๋ฝ๊ธฐ.
//answer ๋น ๋ฐฐ์ด ๋ง๋ค๊ณ , numbers ๋ฐฐ์ด๋ก๋ถํฐ ์ซ์๋ฅผ ํ๋์ฉ ๊บผ๋ธ๋ค. 4๋ฒ ๋ฐ๋ณตํ๋ค.
const answer = [];
for (let n=0; n<=3; n+=1){ // 4๋ฒ ๋ฐ๋ณต.
const index = Math.floor(Math.random() * (numbers.length-1)); // 0 ~ 8 ์ ์. (+1 ์ถ๊ฐํ๋ฉด 0 ~ 9 ์ ์.)
answer.push(numbers[index]); //index๋ฅผ ๋ฌด์์๋ก ๋ฝ๊ณ ,numbers[index]๋ก ์ค์ ์ซ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
//๊ทธ๋ฆฌ๊ณ answer ๋ฐฐ์ด์ ๋ฝ์ ์ซ์๋ฅผ ์ถ๊ฐ (push)ํ๋ค.
numbers.splice(index,1); //numbers ๋ฐฐ์ด์์๋ ์ ๊ฑฐ(splice)ํ๋ค.
//(numbers๋ฐฐ์ด์์ ๋ฝ์์ผ๋๊น ์ญ์ ํ๋ ๊ฒ์ด๋ค.)
}
console.log(answer);
console.log(numbers);
const tries = [];
function checkInput(input) {
if (input.length != 4) { //๊ธธ์ด๋ 4๊ฐ ์๋๊ฐ.
return alert('4์๋ฆฌ ์ซ์๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.');
}
if (new Set(input).size != 4) { //์ค๋ณต๋ ์ซ์๊ฐ ์๋๊ฐ.
//new Set์ ์ค๋ณต์ด ์๋ ๋ฐฐ์ด์ด๋ค.
return alert ('์ค๋ณต๋์ง ์๊ฒ ์
๋ ฅํด์ฃผ์ธ์.');
}
if (tries.includes(input)){ //์ด๋ฏธ ์๋ํ ๊ฐ์ ์๋๊ฐ.
return alert ('์ด๋ฏธ ์๋ํ ๊ฐ์
๋๋ค.');
}
return true;
}
function defeated(){
const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
$logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
}
let out = 0; //์์
$form.addEventListener('submit',(event)=>{
event.preventDefault(); //ํผ ํ๊ทธ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ๋ ์ฝ๋.
const value = $input.value;
$input.value = ''; //์
๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ค๋ ์ฝ๋. ( ์ซ์๊ฐ ์๋๋ผ ๋ฌธ์์ด๋ก ๊ฐ์ด ๋ค์ด์ด)
//์
๋ ฅํ ๊ฐ์ checkInput ํจ์๋ก ๊ฒ์ฆ.
if (!checkInput(value)){
return; //์
๋ ฅ๊ฐ ๋ฌธ์ ์์ ๋.
}
//์
๋ ฅ๊ฐ ๋ฌธ์ ์์ ๋.
//ํ๋ฐ์ธ์ง ๊ฒ์ฌํ๋ค.
if (answer.join('') === value){ //[3,1,4,6] => '3146' ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ๋ฉ์๋๊ฐ join.
//value ๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ. ์ด๊ฒ์ ์๋ก ๋น๊ตํ๋ ๊ฒ์ด๋ค.
//=== ๋ ๊ฐ๊ณผ ํ์
๋ ๋ค ๊ฒ์ฌํ๋ค. == ๋ ๊ฐ์ ๋น๊ตํ๊ธฐ ์ ์ ํ์
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ํ์
์ ๋ณํ ํ ๊ฐ์ ๋น๊ตํ๋ค.
$logs.textContent = 'ํ๋ฐ';
return;
}
//10๋ฒ ์๋ํ๋๊ฐ.
if (tries.length >= 9){
defeated();
return;
}
//๋ช ์คํธ๋ผ์ดํฌ ๋ช ๋ณผ์ธ์ง ๊ฒ์ฌ
let strike = 0;
let ball = 0;
// answer : 3146 , value : 1347
//for๋ฌธ์ ์ด์ฉํ ๋ฐฉ๋ฒ.
// for (let i = 0; i<answer.length; i++){
// const index = value.indexOf(answer[i]);
// if (index > -1) { //์ผ์นํ๋ ์ซ์ ๋ฐ๊ฒฌ. ๊ฒน์น๋ ์ซ์๊ฐ ์์ผ๋ฉด -1๋ณด๋ค ํฌ๋ค. ๊ฒน์น๋ ์ซ์๊ฐ ์์ผ๋ฉด -1.
// //์๋ ์ฝ๋๋ก ๋ณผ๊ณผ ์คํธ๋ผ์ดํฌ๊ฐ ๋๋ ์ง.
// if (index === i){ //์๋ฆฟ์๋ ๊ฐ์.
// strike += 1;
// } else { //์ซ์๋ง ๊ฐ์.
// ball += 1;
// }
// }
// }
// if (strike === 0 && ball === 0){
// out++;
// $logs.append(`${value}:์์`,document.createElement('br'));
// } else {
// //append์ ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ฌธ์์ดand br ํ๊ทธ๋ ๊ฐ์ด ๋ฃ์ ์ ์๋ ๊ฒ์ด๋ค.
// $logs.append(`${value}: ${strike} ์คํธ๋ผ์ดํธ ${ball} ๋ณผ`,document.createElement('br'));
// }
// if (out === 3){
// const message = document.createTextNode(`ํจ๋ฐฐ. ์ ๋ต์ ${answer.join('')}`); //ํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
// $logs.appendChild(message); //๋ก๊ทธ ์์ ์ถ๊ฐํ๋ค.
// return;
// }
//๋ฐฐ์ด์ forEach๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ.
answer.forEach((element, i)=>{ //element : answer์ ๊ฐ ์์ / i : ๊ทธ ์์์ ๋ํ ์ธ๋ฑ์ค.
const index = value.indexOf(element);
if(index > -1){ //์ผ์นํ๋ ์ซ์ ๋ฐ๊ฒฌ.
if(index === i){ //์๋ฆฟ์๋ ๊ฐ์.
strike += 1;
} else{ //์ซ์๋ง ๊ฐ์.
ball += 1;
}
}
})
if (strike === 0 && ball === 0){
out++;
$logs.append(`${value}:์์`,document.createElement('br'));
} else {
//append์ ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ฌธ์์ดand br ํ๊ทธ๋ ๊ฐ์ด ๋ฃ์ ์ ์๋ ๊ฒ์ด๋ค.
$logs.append(`${value}: ${strike} ์คํธ๋ผ์ดํธ ${ball} ๋ณผ`,document.createElement('br'));
}
if (out === 3){
defeated();
return;
}
tries.push(value);//tries ๋ฐฐ์ด์ ์
๋ ฅํ ๊ฐ์ ์ ์ฅํด์ ์๋ ํ์๋ฅผ 1 ๋๋ ค์ค.
});
</script>
</body>
</html>
<!--์ฝ๋์ถ์ฒ (๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ-->
-(๋์) Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
Let's Get IT ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
๋๋ถ(TheBook): (์ฃผ)๋์์ถํ ๊ธธ๋ฒ์์ ์ ๊ณตํ๋ IT ๋์ ์ด๋ ์๋น์ค์ ๋๋ค.
thebook.io
-(๊ฐ์ข) ๋ ์ธ ๊ธฐ๋ฆฟ ์๋ฐ์คํฌ๋ฆฝํธ
https://www.inflearn.com/course
[๋ฌด๋ฃ] [๋ฆฌ๋ด์ผ] ๋ ์ธ ๊ธฐ๋ฆฟ ์๋ฐ์คํฌ๋ฆฝํธ - ์ธํ๋ฐ | ๊ฐ์
๋ณธ ๊ฐ์์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํด ํ๋ก๊ทธ๋๋ฐ ์ฌ๊ณ ๋ ฅ์ ๊ธฐ๋ฅด๋ ์ฐ์ต์ ํฉ๋๋ค. ์น ๊ฒ์์ธ ๊ตฌ๊ตฌ๋จ์ ์์์ผ๋ก ๋๋ง์๊ธฐ, ์ซ์ ์ผ๊ตฌ, ๋ฐ์ ์๋ ํ ์คํธ, ํฑํํ , ๋ก๋ ์ถ์ฒจ๊ธฐ, ๊ฐ์๋ฐ์๋ณด, ์นด
www.inflearn.com