νμ΅λ΄μ©
λ¬Έμ ν΄κ²°μ μν μ€κ³
Play() ν¨μ
- λ§€κ°λ³μ param0λ μ°Έκ°μ A, B, C, D μμλ‘ μ΄λν μΉΈμ μλ―Ένλ μ«μλ₯Ό 4κ°μ© ν¬ν¨νλ λ°°μ΄μ
λλ€.
- μμ)Β
"1,2,3,4"Β λ A 1μΉΈ, B 2μΉΈ, C 3μΉΈ, D 4μΉΈ μ΄λνλ€λ μλ―Έμ λλ€. β μ¦, playν¨μλ parameterλ‘ λ€μ΄μ€λ A, B, C, Dμ μ΄λν μΉΈ λ§νΌ μμ§μ΄κ² λ§λ€κ³ , κ²μ μ’ λ£ μ‘°κ±΄μ νμΈν μ μλλ‘ λ§λλ ν¨μμ¬μΌ ν¨
- μμ)Β
μ£Όμ¬μ κ°
- A, B, C, D 4λͺ
μ μ°Έκ°μκ° μλ€κ³ κ°μ νκ³ λ§€ ν΄λ§λ€ μ£Όμ¬μ λμ μ 1-4 μ¬μ΄μ κ°μ΄ μ
λ ₯μΌλ‘ μ 곡λ©λλ€.
β parameterλ‘ λ€μ΄κ°λ A, B, C, Dμ μ
λ ₯μ 1-4μ κ°μ λλ€μΌλ‘ λ½κ² ν΄ μ£Όλ
dice()ν¨μ μ μ
μ΄λ
- λͺ¨λ μ°Έκ°μλ μμ μ§μ μμ μΆλ°νκ³ , μ£Όμ΄μ§ 1-4 κ°λ§νΌ μ΄λν©λλ€.
β
play()ν¨μλ₯Ό μ μνμ¬ λͺ¨λ μ°Έκ°μλ₯Ό μ΄λνκ² λ§λ¦. μ΄λν νμλ μ΄λν λ€μ μ°Έκ°μ μμΉλ₯Ό 리ν΄ν΄μΌ μμΉλ₯Ό κΈ°λ‘ν μ μμ
μμ
- ν λ²λ λ°©λ¬Ένμ§ μμ κ³³μ λκ΅°κ° λμ°©νλ©΄ κ·Έ κ³³μ μμ ν©λλ€.
β λ§μ½
play()ν¨μμμ μ μ κ° μμ§μμ λ μ°Έκ°μ μμΉμ μμ νμκ° λ°λ‘ λμ΄ μμ§ μμΌλ©΄ μμ νμ β μμ νμλ₯Ό μ΄λ»κ² ν κ²μΈκ°? β λ°°μ΄λ‘ λ§λ€λ©΄ μΈλ±μ€ λ²νΈλ₯Ό ν΅ν΄ νΈνκ² μ κ·Όκ°λ₯
κ°νλΆκ°
- λ€λ₯Έ μ¬λμ΄ μ΄λ―Έ μμ ν κ³³μ λμ°©νλ©΄ λΊμ μ μμ΅λλ€. β μμ νμκ° λμ΄ μμΌλ©΄ κ·Έλ₯ λ°λ‘ μ무κ²λ μμ΄ μ§λκ°
무ν루ν
- μ¬λ¬ μ¬λλ€μ΄ λͺ¨λ μ₯μλ₯Ό μμ ν λκΉμ§ κ³μ μ λ ₯μΌλ‘ μ΄λν μ μμ΅λλ€. β λͺ¨λ μ₯μμ μμ νμκ° λ λκΉμ§ μ΄λ β μμ νμλ₯Ό κ³μν΄μ νμΈν΄μΌ ν¨ β μμ νμλ κ³μν΄μ 루νλ₯Ό λλ©΄μ νμΈν기보λ€λ λ°λ‘ μμ ν κ³³μ μλ₯Ό μΈμ 15κ°κ° λλ©΄ μ’ λ£νλλ‘ λ§λ λ€λ©΄ μκ° λ³΅μ‘λκ° μ€μ΄λ€ κ²
κ²μ μ’ λ£ μ‘°κ±΄
- λ μ΄μ μ΄λν μ
λ ₯κ°μ΄ μκ±°λ, λ μ΄μ μμ ν μ₯μκ° μμΌλ©΄ κ²μμ μ’
λ£ν©λλ€.
β κ²μμ’
λ£ μ‘°κ±΄μ μ΄λν μ
λ ₯κ°μ΄ μκ±°λ μμ ν μ₯μκ° μμ κ²½μ°
β μ²μμ
A, B, C, D 4λͺ μ μ°Έκ°μκ° μλ€κ³ κ°μ νκ³ λ§€ ν΄λ§λ€ μ£Όμ¬μ λμ μ 1-4 μ¬μ΄μ κ°μ΄ μ λ ₯μΌλ‘ μ 곡λ©λλ€.λΌλ λ§μ λ³΄κ³ λ΄κ° μ§μ ν¨μλ₯Ό λ§λλ κ²μΌλ‘ μκ°νμ§λ§ ν΄λΉ 쑰건μ 보λ μλ§ μ λ ₯μΌλ‘ μ 곡λλ κ²μΌλ‘ μκ°λ¨. β νμ§λ§ ν μ€νΈμΌμ΄μ€λ₯Ό νλνλ μ μνκΈ°μλ κ²μλΉ μ€κ³ μμμ μκ°μ΄ 컀 λ°λ‘dice()ν¨μλ₯Ό λ§λ€κΈ°λ‘ κ²°μ
리ν΄
- μ’
λ£ μμ μλ κ° μ°Έκ°μλ³λ‘ μμ ν μ₯μ κ°μλ₯Ό 리ν΄νμΈμ.
β
play()ν¨μμ 리ν΄κ° μμ)Β[ "A" : 4 , "B" : 3 , "C" : 5, "D" : 3 ]
μ€κ³λ₯Ό μν νμ΅ κ³Όμ μμ κΈ°λ‘ν κ²λ€
κ°μ²΄ μ΄κΈ°κ° μ€μ
// Map(4) { 'A' => 0, 'B' => 0, 'C' => 0, 'D' => 0 }
let userInfo = new Map([
["A", 0],
["B", 0],
["C", 0],
["D", 0],
]);κ°μ²΄μ λ§΅μ μ°¨μ΄
| Map | Object | |
|---|---|---|
| 보μ | Mapμ μ¬μ©μκ° μ 곡νλ ν€μ κ°μ λν΄μ μμ νκ² μ¬μ©ν μ μμ | μ¬μ©μκ° μ 곡ν ν€-κ° μμΒ Objectμ μ€μ νλ©΄ 곡격μκ° κ°μ²΄μ νλ‘ν νμ
μ μ¬μ μνμ¬Β κ°μ²΄ μ£Όμ
곡격 μ λ°μμν¬ μ μμλλ°μ μΈ ν€ λ¬Έμ μ λ§μ°¬κ°μ§λ‘Β nullΒ νλ‘ν νμ
κ°μ²΄λ₯Ό μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μλ μμ |
| ν€ μ ν | Mapμ ν€λ λͺ¨λ κ°(ν¨μ, κ°μ²΄ λλ μμκ° ν¬ν¨)μ΄ λ μ μμ | Objectμ ν€λΒ StringΒ λλΒ Symbolμ΄μ¬μΌ ν¨ |
| ν€ μμ | Mapμμ ν€λ λ¨μνκ³ μ§κ΄μ μΈ λ°©μμΌλ‘ μ λ ¬MapΒ κ°μ²΄λ νλͺ©μ μ½μ
ν μμλλ‘ νλͺ©, ν€ λ° κ°μ λ°λ³΅ | μΌλ°μ μΈΒ Objectμ ν€λ μ λ ¬λμ΄ μμ§λ§ νμ κ·Έλ°κ²μ μλλ©° μμκ° λ³΅μ‘ν¨. κ²°κ³Όμ μΌλ‘ μμ± μμμ μμ‘΄νμ§ μλ κ²μ΄ κ°μ₯ μ’μ |
| ν¬κΈ° | Mapμ μμ΄ν
μ μλΒ size μμ±μμ μ½κ² κ°μ Έμ¬ μ μμ | Objectμ μμ΄ν
μλ μλμΌλ‘ κ²°μ ν΄μΌ ν¨ |
| μν | MapμΒ μνκ°λ₯(iterable)νκΈ° λλ¬Έμ μ§μ λ°λ³΅ν μ μμ | ObjectλΒ iteration protocolμ ꡬννμ§ μκΈ° λλ¬Έμ κ°μ²΄λΒ forβ¦ofλ¬Έμ μ¬μ©νμ¬ μ§μ μ μΌλ‘ λ°λ³΅ν μ μμμ°Έκ³ : - κ°μ²΄λ iteration protocolμ ꡬννκ±°λΒ Object.keysΒ νΉμΒ Object.entriesΒ λ₯Ό μ¬μ©νμ¬ κ°μ²΄μ λ°λ³΅ κ°λ₯ νλͺ©μ μ»μ μ μμ- forβ¦inΒ λ¬Έμ μ¬μ©νλ©΄ κ°μ²΄μ μ΄κ±° κ°λ₯ν μμ±(enumerable)μ λ°λ³΅ν μ μμ |
| μ±λ₯ | ν€-κ° μμ λΉλ²ν μΆκ° λ° μ κ±°μ κ΄λ ¨λ μν©μμλ μ±λ₯μ΄ μ’ λ μ’μ | ν€-κ° μμ λΉλ²ν μΆκ° λ° μ κ±°μ μ΅μ νλμ§ μμ |
| Serialization and parsing | μ§λ ¬ν λλ ꡬ문 λΆμμ λν κΈ°λ³Έ μ§μμ΄ μμ | JSON.stringify()λ₯Ό μ¬μ©νμ¬Β Objectμ JSONμΌλ‘ μ§λ ¬νλ₯Ό κΈ°λ³Έ μ§μJSON.parse()λ₯Ό μ¬μ©νμ¬ JSONμμΒ ObjectμΌλ‘μ ꡬ문 λΆμμ κΈ°λ³Έ μ§μ |
μ€κ³ν μ½λ
0-1. μ£Όμ¬μ λ§΅
- play ν¨μμ μ΄λν μΉΈλ€μ λ°°μ΄μ΄ parameterλ‘ λ€μ΄κ°λ€λ©΄ play ν¨μμλ a,b,c,dλ₯Ό μμ§μ΄κ² λ§λ€λλ‘ νκ³ μ¬κΈ°μ μμ νμλ₯Ό ν΄μΌ ν¨
- μ°Έκ°μλ³λ‘ μμ ν μ₯μ κ°μλ λ§΅μΌλ‘ λ§λ€λ©΄ λμ§λ§, μ£Όμ¬μ λμ΄ ν κ°μ κ²½μ°λ μ΄λμ κΈ°λ‘? β κ·Έλ₯ λ°°μ΄μ ν΄λΉ μΉΈ μλ§νΌ 0μΌλ‘ μ±μ λ£κ³ μμ νμμ κ²½μ° 1νμνλ©΄ λ λ―?
let diceMap = new Array(16).fill(0);μΉΈμ 5μΉΈμ΄μ§λ§ 16κ°λ‘ ν μ΄μ λ μΆλ°μ§λ₯Ό λλ―Έλ‘ λ§λ€μ΄ λμ λ°λ‘ diceμμ -1μ νμ§ μλλ‘ λ§λ¦
0-2. μ°Έκ°μ μμΉ λ° μμ λ
// κ° μ°Έκ°μκ° μμ ν λ
let userOwn = new Map([
["A", 0],
["B", 0],
["C", 0],
["D", 0],
]);
// μ°Έκ°μ μμΉ
let userLoc = {
A: 0,
B: 0,
C: 0,
D: 0,
};
// μ΄ μμ λ
let owned = 0;- μ°Έκ°μκ° μμ ν λ
μ
Mapμ¬μ© - μ°Έκ°μ μμΉμ λ
μ
Objectμ¬μ©- μ¦μ μ λ°μ΄νΈκ° λ°μνλλ°, μ¬κΈ°μ ν΄λΉ κ°μ μ κ·Όνκ³ μ λ°μ΄νΈνλ μ½λλ Objectκ° μ§κ΄μ μ΄λΌ μ¬μ©ν΄ 보μμ
- λ°λ₯쑰건μ μν μ΄ μμ λ
μ μ«μλ₯Ό ν λΉνμ¬ λͺ¨λ μΉΈ(15μΉΈ)μ λλ¬νλ©΄ λ κ²μμ μ§ννκ² νμ§ μκΈ° μν΄ λ°λ‘ μ¬μ©
- λ§€λ² λ°°μ΄μ λλ©΄μ μμ νμ§ μμ λ μ κ²μ¬ν νμκ° μμ
1. μ£Όμ¬μ κ°
const dice = () => {
let diceList = [];
for (let person = 0; person < 4; person++) {
const random = Math.floor(Math.random() * 100);
let moveCnt;
if (random >= 0 && random < 25) {
moveCnt = 1;
} else if (random >= 25 && random < 50) {
moveCnt = 2;
} else if (random >= 50 && random < 75) {
moveCnt = 3;
} else if (random >= 75 && random < 100) {
moveCnt = 4;
}
diceList.push(moveCnt);
}
return diceList;
};- 4λͺ μ μ°Έκ°μκ° μλ€κ³ κ°μ λμ΄ μμΌλ―λ‘ λͺ μ
- 4λ²λμ 루νλ¬Έμ λλ©΄μ λλ€ν μλ₯Ό λ½κ³ κ°μ κ°μ νλ₯ λ‘ 1, 2, 3, 4λ₯Ό λλ
moveCntλ³μμ ν λΉ - ν λΉν μλ₯Ό λ°°μ΄μ 4λ² λ£μ΄ 리μ€νΈλ₯Ό μμ±ν ν 리ν΄
2. Play() ν¨μ
const play = (dice) => {
console.log(dice);
for (let i = 0; i < dice.length; i++) {
let user;
switch (i) {
case 0:
user = "A";
break;
case 1:
user = "B";
break;
case 2:
user = "C";
break;
case 3:
user = "D";
break;
}
let move = (userLoc[user] + dice[i]) % 16;
userLoc[user] = move;
if (diceMap[move] === 0 && move !== 0) {
diceMap[move] = 1;
userOwn.set(user, userOwn.get(user) + 1);
owned++;
}
if (owned === 15) {
return userOwn;
}
}
return userOwn;
};- λ§€κ°λ³μ param0λ μ°Έκ°μ A, B, C, D μμλ‘ μ΄λν μΉΈμ μλ―Ένλ μ«μλ₯Ό 4κ°μ© ν¬ν¨νλ λ°°μ΄μ
λλ€.
- μμ)Β
"1,2,3,4"Β λ A 1μΉΈ, B 2μΉΈ, C 3μΉΈ, D 4μΉΈ μ΄λνλ€λ μλ―Έμ λλ€. β μ¦, playν¨μλ parameterλ‘ λ€μ΄μ€λ A, B, C, Dμ μ΄λν μΉΈ λ§νΌ μμ§μ΄κ² λ§λ€κ³ , κ²μ μ’ λ£ μ‘°κ±΄μ νμΈν μ μλλ‘ λ§λλ ν¨μμ¬μΌ ν¨
- μμ)Β
- μ΄λμ νμ ν΄μΌ νλ―λ‘ μ£Όμ¬μ κ°κ³Ό νμ¬ μ μ μ μμΉλ₯Ό λν λ€μ 16μΌλ‘ λλ λλ¨Έμ§λ‘ μμΉ μ λ°μ΄νΈ
- μμ ν μ μλ 쑰건(ν΄λΉ 쑰건μ λ
μ κ±΄λ¬Όμ΄ μκ³ μμμ (λλ―Έ)κ° μλ κ²½μ°)
- ν΄λΉ μ μ μ 건물 μ μΆκ°
- ν΄λΉ μ£Όμ¬μνμ λ μ μμ νλ€λ κ²μ 1λ‘ νμ
- μ΄ μΈμ΄ 건물 μλ₯Ό μΆκ°
- μμ ν μ μλ κ²½μ° κ·Έλ₯ μ§λκ°
play()ν¨μμμ λ§μ½ μ΅λ μμ κ°μλ₯Ό λμΌλ©΄ λ°λ‘ λΉ μ Έλμ€λλ‘ λ°λ₯쑰건 λͺ μ
3. κ²μ μμ λ° μ’ λ£
function game(diceCnt) {
let diceData = dice(diceCnt);
while (true) {
let dice = diceData.pop().split(",").map(Number);
let result = play(dice);
if (owned === 15 || diceData.length === 0) {
return result;
}
}
}
console.log(game(1));- λ΄κ° ν΄μλ₯Ό μ λ ₯νλ©΄ ν΄λΉ ν΄μλ§νΌ μ§ννλλ‘ λ§λ¦
while(true)κ° λ¬΄ν루νμ κ°ν μνμ±μ΄ μμ§λ§ λ°λ₯쑰건μ κΌΌκΌΌν λͺ μνμ¬ νμΆ- λ°λ₯쑰건
- μ£Όμ¬μκ° λ μμ λ
- λ μ΄μ μμ ν λ μ΄ μμ λ
- λ°λ₯쑰건
μμ± μ½λ
let diceMap = new Array(16).fill(0);
let userOwn = new Map([
["A", 0],
["B", 0],
["C", 0],
["D", 0],
]);
let userLoc = {
A: 0,
B: 0,
C: 0,
D: 0,
};
let owned = 0;
const play = (dice) => {
for (let i = 0; i < dice.length; i++) {
let user;
switch (i) {
case 0:
user = "A";
break;
case 1:
user = "B";
break;
case 2:
user = "C";
break;
case 3:
user = "D";
break;
}
let move = (userLoc[user] + dice[i]) % 16;
userLoc[user] = move;
if (diceMap[move] === 0 && move !== 0) {
diceMap[move] = 1;
userOwn.set(user, userOwn.get(user) + 1);
owned++;
}
if (owned === 15) {
return userOwn;
}
}
return userOwn;
};
const dice = (cnt) => {
let diceData = [];
for (let i = 0; i < cnt; i++) {
let diceList = [];
for (let person = 0; person < 4; person++) {
const random = Math.floor(Math.random() * 100);
let moveCnt;
if (random >= 0 && random < 25) {
moveCnt = 1;
} else if (random >= 25 && random < 50) {
moveCnt = 2;
} else if (random >= 50 && random < 75) {
moveCnt = 3;
} else if (random >= 75 && random < 100) {
moveCnt = 4;
}
diceList.push(moveCnt);
}
diceData.push(diceList.join(","));
}
return diceData;
};
function game(turns) {
let diceData = dice(turns);
while (true) {
let dice = diceData.pop().split(",").map(Number);
let result = play(dice);
if (owned === 15 || diceData.length === 0) {
return result;
}
}
}
console.log(game(1));