π‘λ¬Έμ λΆμ μμ½
- μ£Όμ΄μ§ nμ λν΄ μμ΄μ μμ±νκ³ , μ ν¨ν 쑰건μ λ§μ‘±νλ μμ΄ μ€μμ κ°μ₯ μμ μλ₯Ό μ°ΎμμΌ νλ€.
- μμ΄μ΄ μ ν¨νμ§ νλ¨νκΈ° μν΄μλ νμ¬ μμ΄μ μΆκ°ν μ«μκ° μ΄μ μ μΆκ°λ μ«μλ€κ³Ό μ΄λ»κ² μ°κ²°λλμ§λ₯Ό κ³ λ €ν΄μΌ νλ€.
π‘μκ³ λ¦¬μ¦ μ€κ³
- μ¬κ· λ°±νΈλνΉ
- νμ¬ μμ΄μ κΈΈμ΄κ° nμ΄ λ λκΉμ§ μ«μλ₯Ό μΆκ°νλ€.
- κ° μ«μλ₯Ό μΆκ°νκΈ° μ μ μ ν¨μ±μ 체ν¬νλ€.
- κ°μ μ«μκ° 3λ² μ΄μ μ°μμΌλ‘ μλμ§ νμΈνλ€.
- λΆλΆ μμ΄μ΄ 1, 2, 3μΌλ‘ μ΄λ£¨μ΄μ Έ μλμ§ νμΈνλ€.
- μ ν¨μ± κ²μ¬
- μμ΄μ λ§μ§λ§ 2κ°μ μ«μμ μΆκ°νλ €λ μ«μλ₯Ό λΉκ΅νμ¬ μ°μλ μ«μκ° 3κ°κ° λλμ§ νμΈνλ€.
- μμ΄μ λ§μ§λ§ 2κ° μ«μμ νμ¬ μμ΄μμ 1, 2, 3μ΄ μ°μμΌλ‘ μλμ§ νμΈνλ€.
- κΈ°μ μ¬λ‘
- μμ΄μ κΈΈμ΄κ° nμ΄ λμμ λ, νμ¬ μμ΄μ κ²°κ³Όλ‘ λ°ννλ€.
π‘μ½λ
const fs = require('fs');
const path = require('path');
const input = fs.readFileSync(path.join(__dirname, 'input.txt')).toString().trim();
const n = parseInt(input, 10);
function isValid(sequence) {
const len = sequence.length;
// κ°μ μ«μκ° 3λ² μ΄μ μ°μμΈμ§ νμΈ
if (len >= 3 && sequence[len - 1] === sequence[len - 2] && sequence[len - 2] === sequence[len - 3]) {
return false;
}
// λΆλΆ μμ΄ μ€ 1, 2, 3μ΄ μ°μμΈμ§ νμΈ
if (len >= 3) {
const lastThree = sequence.slice(-3);
if (lastThree[0] !== lastThree[1] && lastThree[1] !== lastThree[2] && lastThree[0] !== lastThree[2]) {
return false;
}
}
return true;
}
function findGoodSequence(n, sequence = []) {
if (sequence.length === n) {
return sequence.join('');
}
for (let i = 1; i <= 3; i++) {
sequence.push(i);
if (isValid(sequence)) {
const result = findGoodSequence(n, sequence);
if (result) {
return result;
}
}
sequence.pop();
}
return null;
}
console.log(findGoodSequence(n));
π‘μκ° λ³΅μ‘λ
- μκ° λ³΅μ‘λλ O(3^n)μ΄λ€.
- μμ΄μ κΈΈμ΄κ° nμΌ λ, κ° μμΉμ 1, 2, 3 μ€ νλλ₯Ό μ νν μ μλ κ²½μ°μ μκ° 3κ°μ΄κΈ° λλ¬Έμ΄λ€.
- μ ν¨μ± κ²μ¬ κ³Όμ μμ λΆνμν κ²½λ‘λ₯Ό μ°¨λ¨νλ―λ‘ μ€μ μκ°μ μ΄λ³΄λ€ λ μ μ μ μλ€.