π νλ‘κ·Έλλ¨Έμ€ 12985 : μμ λμ§ν - Javascript
2023-02-25
λ¬Έμ μ€λͺ
β³β³ κ²μλνκ° κ°μ΅λμμ΅λλ€. μ΄ λνλ Nλͺ μ΄ μ°Έκ°νκ³ , ν λλ¨ΌνΈ νμμΌλ‘ μ§νλ©λλ€. Nλͺ μ μ°Έκ°μλ κ°κ° 1λΆν° Nλ²μ μ°¨λ‘λλ‘ λ°°μ λ°μ΅λλ€. κ·Έλ¦¬κ³ , 1λ²β2λ², 3λ²β4λ², β¦ , N-1λ²βNλ²μ μ°Έκ°μλΌλ¦¬ κ²μμ μ§νν©λλ€. κ° κ²μμμ μ΄κΈ΄ μ¬λμ λ€μ λΌμ΄λμ μ§μΆν μ μμ΅λλ€. μ΄λ, λ€μ λΌμ΄λμ μ§μΆν μ°Έκ°μμ λ²νΈλ λ€μ 1λ²λΆν° N/2λ²μ μ°¨λ‘λλ‘ λ°°μ λ°μ΅λλ€. λ§μ½ 1λ²β2λ² λΌλ¦¬ 겨루λ κ²μμμ 2λ²μ΄ μΉλ¦¬νλ€λ©΄ λ€μ λΌμ΄λμμ 1λ²μ λΆμ¬λ°κ³ , 3λ²β4λ²μμ 겨루λ κ²μμμ 3λ²μ΄ μΉλ¦¬νλ€λ©΄ λ€μ λΌμ΄λμμ 2λ²μ λΆμ¬λ°κ² λ©λλ€. κ²μμ μ΅μ’ ν λͺ μ΄ λ¨μ λκΉμ§ μ§νλ©λλ€.
μ΄λ, μ²μ λΌμ΄λμμ Aλ²μ κ°μ§ μ°Έκ°μλ κ²½μμλ‘ μκ°νλ Bλ² μ°Έκ°μμ λͺ λ²μ§Έ λΌμ΄λμμ λ§λλμ§ κΆκΈν΄μ‘μ΅λλ€. κ²μ μ°Έκ°μ μ N, μ°Έκ°μ λ²νΈ A, κ²½μμ λ²νΈ Bκ° ν¨μ solutionμ 맀κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ²μ λΌμ΄λμμ Aλ²μ κ°μ§ μ°Έκ°μλ κ²½μμλ‘ μκ°νλ Bλ² μ°Έκ°μμ λͺ λ²μ§Έ λΌμ΄λμμ λ§λλμ§ return νλ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ. λ¨, Aλ² μ°Έκ°μμ Bλ² μ°Έκ°μλ μλ‘ λΆκ² λκΈ° μ κΉμ§ νμ μ΄κΈ΄λ€κ³ κ°μ ν©λλ€.
μ νμ¬ν
- N : 21 μ΄μ 220 μ΄νμΈ μμ°μ (2μ μ§μ μΉμΌλ‘ μ£Όμ΄μ§λ―λ‘ λΆμ μΉμ λ°μνμ§ μμ΅λλ€.)
- A, B : N μ΄νμΈ μμ°μ (λ¨, A β B μ λλ€.)
μ μΆλ ₯ μ
N | A | B |
---|---|---|
8 | 4 | 7 |
- μμ #1 첫 λ²μ§Έ λΌμ΄λμμ 4λ² μ°Έκ°μλ 3λ² μ°Έκ°μμ λΆκ² λκ³ , 7λ² μ°Έκ°μλ 8λ² μ°Έκ°μμ λΆκ² λ©λλ€. νμ μ΄κΈ΄λ€κ³ κ°μ νμΌλ―λ‘ 4λ² μ°Έκ°μλ λ€μ λΌμ΄λμμ 2λ²μ΄ λκ³ , 7λ² μ°Έκ°μλ 4λ²μ΄ λ©λλ€. λ λ²μ§Έ λΌμ΄λμμ 2λ²μ 1λ²κ³Ό λΆκ² λκ³ , 4λ²μ 3λ²κ³Ό λΆκ² λ©λλ€. νμ μ΄κΈ΄λ€κ³ κ°μ νμΌλ―λ‘ 2λ²μ λ€μ λΌμ΄λμμ 1λ²μ΄ λκ³ , 4λ²μ 2λ²μ΄ λ©λλ€. μΈ λ²μ§Έ λΌμ΄λμμ 1λ²κ³Ό 2λ²μΌλ‘ λ μ°Έκ°μκ° λΆκ² λλ―λ‘ 3μ return νλ©΄ λ©λλ€.
νμ΄ κ³Όμ - μλ 1 : μ€μ λ‘ λΌμ΄λ μ§ν (μ±κ³΅)
κ°μ₯ λ¨μνκ² μ£Όμ΄μ§λλ‘ λͺ¨λ λΌμ΄λλ₯Ό μ§μ μ§νν΄ κ²°κ³Όλ₯Ό μ°Ύλ λ°©μμΌλ‘ ꡬννμ΅λλ€. κ΅μ₯ν λΉν¨μ¨μ μ΄μ§λ§ μ€μ λ‘ μ μλνκ³ , ν μ€νΈ μΌμ΄μ€λ λͺ¨λ ν΅κ³Όνμ΅λλ€.
function solution(n, a, b) {
//λμ§ν μμ±
//aμ bλ 1, λλ¨Έμ§λ 0μΌλ‘ μ μ₯
const table = [];
for (let i = 0; i < n; ++i) {
table[i] = Number(a - 1 === i || b - 1 === i);
}
//0λΆν° nκΉμ§μ λμ§νλ₯Ό μνν ν nμ λ°μΌλ‘ λλλ©° λ°λ³΅ μ§ν
let round = 0;
for (let i = n; n > 1; n /= 2) {
round++;
//λΌμ΄λ κ²°κ³Όλ λ§μ
μΌλ‘ κ°λ¨νκ² κ³μ°
for (let j = 0; j < n; j += 2) {
table[j / 2] = table[j] + table[j + 1];
//λΌμ΄λ κ²°κ³Όκ° 2μΈ κ²½μ° aμ bκ° λ§λ κ²μ΄λ―λ‘ λΌμ΄λλ₯Ό λ°ν
if (table[j / 2] === 2) {
return round;
}
}
}
}
μ κ²½μ° μ§ν λ°©μ
round | table | μ€λͺ |
---|---|---|
0 | [0, 0, 0, 1, 0, 0, 1, 0] | table λ°°μ΄ μμ± |
1 | [0, 1, 0, 1] | λΌμ΄λ μ§ν |
2 | [1, 1] | λΌμ΄λ μ§ν |
3 | [2] | 2κ° λμ΄ round λ°ν |
(table λ°°μ΄μ 1μ κ°κ° aμ bλ₯Ό μλ―Έν©λλ€)
νμ΄ κ³Όμ - μλ 2 : Aμ Bλ₯Ό 2λ‘ λλλ©° λΉκ΅
μλ 1μ λ°©μμμλ λΌμ΄λκ° μ§ν λ λλ§λ€ λ°°μ΄μ΄ λ°μΌλ‘ μ€μ΄λ€κΈ΄ νμ§λ§ μλ―Έμλ 0κ°λ€μ λν μ°μ°μ΄ λ°λ³΅λκΈ° λλ¬Έμ κ΅μ₯ν λΉν¨μ¨μ μ λλ€. μ¬μ€μ λͺ¨λ 0μ μλ―Έκ° μλ κ°μ΄κΈ° λλ¬Έμ λ°°μ΄μμ΄ ν¨μ¨μ μΌλ‘ aμ bλ§ μ΄μ©ν΄ λΌμ΄λ κ°μ μ°Ύμ λ°©λ²μ κ³ λ―Όν΄λ΄€μ΅λλ€.
λ¨Όμ μλ1μμ aμ bκ° ν¬ν¨λμ§ μμ λͺ¨λ λΌμ΄λ κ³μ°μ΄ μλ―Έκ° μκΈ° λλ¬Έμ μλ΅ν νμκ° μμ΅λλ€. μ΄λ₯Ό μν΄ aμ bκ° μ΄λ»κ² μ΄λνλμ§λ₯Ό νμ ν΄λ³΄λ©΄ μλμ κ°μ΅λλ€.
μ κ²½μ° aμ bμ μΈλ±μ€ λ³ν
round | a | b |
---|---|---|
0 | 3 (4λ²μ§Έ μ μ) | 6 (7λ²μ§Έ μ μ) |
1 | 1 (2λ²μ§Έ μ μ) | 3 (4λ²μ§Έ μ μ) |
2 | 0 (1λ²μ§Έ μ μ) | 1 (2λ²μ§Έ μ μ) |
3 | 0 (1λ²μ§Έ μ μ) | 0 (1λ²μ§Έ μ μ) |
aμ bκ° λΌμ΄λκ° μ§ν λ λλ§λ€ 2λ‘ λλ κ°μ μ¬λ¦ΌμΌλ‘ λ³κ²½λκ³ , μ΄ κ°μ΄ κ°μμ§ λ λΌμ΄λ κ²°κ³Όλ₯Ό λ°ννκ² λλ€λ κ²μ νμ νμ΅λλ€. κ·Έ ν μ΄ λ°©μλλ‘ μλνλλ‘ μμ ν΄ μ½λλ₯Ό κ°μ νμ΅λλ€.
κ·Έ κ²°κ³Ό ν μ€νΈ μΌμ΄μ€ μ€ν μκ°μ΄ νκ· 11.92msμμ 0.04msλ‘ μλ±ν λΉ¨λΌμ‘μ΅λλ€. λν, λ°°μ΄μ μ¬μ©ν νμ 27~34λ² ν μ€νΈμΌμ΄μ€μμ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ 30λ©κ° λ μ¦κ°νλ μ¦μμ΄ μ¬λΌμ‘μ΅λλ€.
function solution(n, a, b) {
let round = 0;
while (a !== b) {
//aμ bκ° κ°μμ§ λκΉμ§ λ°λ³΅
round++; //λΌμ΄λ μ§ν
//aμ bλ₯Ό 2λ‘ λλκ³ μ¬λ¦Ό
a = Math.ceil(a / 2);
b = Math.ceil(b / 2);
}
return round;
}