Coding Test/Codility
8. 리λ (Leader) Codility Lesson νκ΅μ΄ μ 리본 (JavaScript ver.)
chamroro
2025. 3. 1. 23:31
리λ(Leader)λ?
μ£Όμ΄μ§ μμ΄ A = [aβ, aβ, ..., aβββ] μμ 리λ(Leader) λ μμ΄μ μμ μ€ μ λ°μ μ΄κ³Όνμ¬ λ±μ₯νλ μμ λ₯Ό μλ―Ένλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ μμ΄μ΄ μμ λ:
A = [6, 8, 4, 6, 8, 6, 6];
μ μμ΄μμ 6μ 4λ² λ±μ₯νμ¬ n/2 = 3.5 λ³΄λ€ λ§μ΄ λ±μ₯νλ―λ‘ λ¦¬λκ° λλ€. 리λλ μ΅λ νλλ§ μ‘΄μ¬ νλ€.
1. O(n²) μκ° λ³΅μ‘λμ λ¨μν λ°©λ²
κ° μμμ λ±μ₯ νμλ₯Ό μΈμ΄ 리λλ₯Ό μ°Ύλ λ°©λ²μ΄λ€.
JavaScript μ½λ:
function slowLeader(A) {
let n = A.length;
let leader = -1;
for (let k = 0; k < n; k++) {
let candidate = A[k];
let count = 0;
for (let i = 0; i < n; i++) {
if (A[i] === candidate) {
count++;
}
}
if (count > Math.floor(n / 2)) {
leader = candidate;
}
}
return leader;
}
μκ° λ³΅μ‘λ: O(n²) (λͺ¨λ μμλ₯Ό λ°λ³΅μ μΌλ‘ λΉκ΅)
2. O(n log n) μκ° λ³΅μ‘λμ μ λ ¬ κΈ°λ° λ°©λ²
λ°°μ΄μ μ λ ¬νλ©΄ κ°μ κ°λ€μ΄ μΈμ νκ² λͺ¨μ΄λ―λ‘, μ€μκ°(A[n/2])μ΄ λ¦¬λμΌ κ°λ₯μ±μ΄ λλ€.
JavaScript μ½λ:
function fastLeader(A) {
let n = A.length;
A.sort((a, b) => a - b);
let candidate = A[Math.floor(n / 2)];
let count = A.filter(x => x === candidate).length;
return count > Math.floor(n / 2) ? candidate : -1;
}
μκ° λ³΅μ‘λ: O(n log n) (μ λ ¬ ν λ¨μ λ°λ³΅)
3. O(n) μκ° λ³΅μ‘λμ μ€ν κΈ°λ° λ°©λ²
μμ΄λμ΄:
- μλ‘ λ€λ₯Έ λ μμλ₯Ό μ κ±°ν΄λ 리λλ λ³νμ§ μλλ€.
- μ€νμ νμ©ν΄ μλ‘ λ€λ₯Έ μμλ₯Ό μ κ±°νλ©΄μ λ¨μ μμλ₯Ό 리λ νλ³΄λ‘ μ ννλ€.
- λ§μ§λ§μΌλ‘ 리λ ν보μ λ±μ₯ νμλ₯Ό μΈμ΄ μ€μ 리λμΈμ§ νμΈνλ€.
JavaScript μ½λ:
function goldenLeader(A) {
let n = A.length;
let size = 0;
let value;
for (let k = 0; k < n; k++) {
if (size === 0) {
size++;
value = A[k];
} else {
size += (A[k] === value) ? 1 : -1;
}
}
let candidate = -1;
if (size > 0) {
candidate = value;
}
let count = A.filter(x => x === candidate).length;
return count > Math.floor(n / 2) ? candidate : -1;
}
μκ° λ³΅μ‘λ: O(n) (κ° μμλ₯Ό ν λ²μ©λ§ νμ)
λ°μν