[Algorithm] μ°μ νμ€ λΆλΆ μμ΄μ ν©
π λ¬Έμ
μ΄λ€ μμ΄μ μ°μ λΆλΆ μμ΄μ κ°μ κΈΈμ΄μ νμ€ μμ΄μ κ° μμλΌλ¦¬ κ³±νμ¬ μ°μ νμ€ λΆλΆ μμ΄μ λ§λ€λ € ν©λλ€. νμ€ μμ΄μ΄λ [1, -1, 1, -1 …] λλ [-1, 1, -1, 1 …] κ³Ό κ°μ΄ 1 λλ -1λ‘ μμνλ©΄μ 1κ³Ό -1μ΄ λ²κ°μ λμ€λ μμ΄μ
λλ€.
μλ₯Ό λ€μ΄ μμ΄ [2, 3, -6, 1, 3, -1, 2, 4]μ μ°μ λΆλΆ μμ΄ [3, -6, 1]μ νμ€ μμ΄ [1, -1, 1]μ κ³±νλ©΄ μ°μ νμ€ λΆλΆμμ΄μ [3, 6, 1]μ΄ λ©λλ€. λ λ€λ₯Έ μμλ‘ μ°μ λΆλΆ μμ΄ [3, -1, 2, 4]μ νμ€ μμ΄ [-1, 1, -1, 1]μ κ³±νλ©΄ μ°μ νμ€ λΆλΆμμ΄μ [-3, -1, -2, 4]μ΄ λ©λλ€.
μ μ μμ΄ sequenceκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ°μ νμ€ λΆλΆ μμ΄μ ν© μ€ κ°μ₯ ν° κ²μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- 1 ≤ sequenceμ κΈΈμ΄ ≤ 500,000
- -100,000 ≤ sequenceμ μμ ≤ 100,000
- sequenceμ μμλ μ μμ λλ€.
μ μΆλ ₯ μ
[2, 3, -6, 1, 3, -1, 2, 4] | 10 |
βοΈ νμ΄
μ²μ μ κ·Ό λ°©λ²μ λ°°μ΄μ νλ μ μΈνκ³ μΈμ ν λμλ₯Ό λν΄μ μ μΈνλ λ°°μ΄μ λ£μΌλ©° λ°°μ΄μ κΈΈμ΄κ° 1μΌλκΉμ§ λ°λ³΅νλ λ‘μ§μ μκ°νλ€. νμ§λ§ μκ°ν΄λ³΄λ [1, 2, 3]μ΄λΌλ λ°°μ΄μ΄ μλ κ²½μ° [1, 2, 3] -> [3, 5] -> [8] μ΄λ κ² μ§νμ΄ λ ν λ° μ€λ³΅μΌλ‘ μκ° λν΄μ§κΈ° λλ¬Έμ μμ ν μλͺ»λ μκ°μμ κΉ¨λ¬μλ€.
λ€μ μκ°ν λ°©λ²μ λμ ν©μ μ΄μ©νλ λ°©λ²μ΄μλ€. 5λ²μ¬ μκΉμ§ λν΄μ§ κ°μμ 2λ²μ§Έ μκΉμ§ λν΄μ§ κ°μ λΉΌλ©΄ 3λ²μ§ΈλΆν° 5λ²μ§ΈκΉμ§ λν κ°μ ꡬν μ μλ€λ μκ°μμ μμνλ€.
μ°μ νμ€ μμ΄[1, -1, 1, -1 ...]μ λ°°μ΄μ κ³±ν΄μ€¬λ€. μ¬κΈ°μ μ€μνλ€κ³ μκ°νλ μ μ 1λ‘ μμνλ νμ€ μμ΄μ΄ κ³±ν΄μ§λ μλλ©΄ -1λ‘ μμνλ μμ΄μ΄ κ³±ν΄μ§λμ§ μκ΄μ΄ μλ€λ μ μ΄λ€. λ΅μ λμΆνμ λ μ΅λκ°μ΄λ μ΅μκ°μ λλ€ κ΅¬ν΄μ μμλ‘ λ§λ€μ΄ μ€ λ€μ λΉκ΅νλ©΄ λλ€. μλνλ©΄ μ΅μκ°μ΄ λ΅μ΄ λλ κ²½μ° μμμΈ κ²½μ°μΌν λ° μ΄ κ²½μ° νμ€μμ΄μ μμμ λ°λ(1 λλ -1)λ‘ νμ λ μ΅λκ°μ΄ λ΅μ΄ λλ κ²½μ°μ΄κΈ° λλ¬Έμ΄λ€. λ°λΌμ sequence λ°°μ΄μ μννλ©΄μ μΈλ±μ€λ₯Ό κΈ°μ€μΌλ‘ μ§μμΌ λ λλ νμμΌ λλ₯Ό ꡬλΆνμ¬ μμλ‘ λ³νν΄μ€¬λ€.
λμ ν©μ μλ‘μ΄ λ°°μ΄μ λ£κ³ μΆλ ₯ν΄λ³΄λ λ¬Έμ μ μμλ‘λ [-2, 1, 7, 8, 5, 4, 2, 6] λΌλ κ°μ΄ λμλ€. μ΄λ₯Ό λ³΄κ³ λ μκ°μ΄ κ·Έλ₯ ꡬν λμ ν© λ°°μ΄μμ μ΅λκ°μμ μ΅μκ°μ λΉΌλ©΄ νμ κ°μ₯ μ΅λκ° λλ μκ° λμ€μ§ μμκΉ?λΌλ μκ°μ΄ λ€μλ€. λ¬Έμ μ μμλ₯Ό μλ‘ 4λ²μ§Έ κ°κΉμ§ λν κ° 8μ΄ μ΅λμ΄κ³ , 1λ²μ§ΈκΉμ§ λν -2κ° μ΅μκ°μ΄λ€. μ΅λκ° - μ΅μκ° (8 - -2)λ₯Ό νλ©΄ 10μ΄ λμ€λλ° μ΄λ 2λ²μ§ΈλΆν° 4λ²μ§Έ κ°κΉμ§ λν κ°μ΄ λμ€κ² λκΈ° λλ¬Έμ΄λ€.
μ΅μκ°κ³Ό μ΅λκ°μ ꡬνκ³ λ΅μ ꡬνλλ° κ²½μ°μ μκ° 3κ°μ§ μμλ€.
- λ λ€ μμμΈ κ²½μ°: λͺ¨λ μμμΈ κ²½μ°λ‘ μ΅μκ°μ μ¬μ©ν΄μ λ΅μ ꡬνλ€.
- λ λ€ μμμΈ κ²½μ°: λͺ¨λ μμμΈ κ²½μ°λ‘ μ΅λκ°μ μ¬μ©ν΄μ λ΅μ ꡬνλ€.
- λΆνΈκ° μλ‘ λ€λ₯Έ κ²½μ°: μμ μμκ° μμ¬μλ κ²½μ°λ‘ μ΅λκ°κ³Ό μ΅μκ°μ μ¬μ©νμ¬ λ΅μ ꡬνλ€.
1λ²μ§Έ κ²½μ°μΌ λ μ΅μκ°μ λΆνΈλ₯Ό λ°κΏμ answerμ ν λΉ, 2λ²μ§Έ κ²½μ°μΌ λ μ΅λκ°μ ν λΉ, λ§μ§λ§ 3λ²μ§Έ κ²½μ°μΌ λ μμλ‘ λ³ννκ³ λν΄μ€¬λ€.
β¨οΈ μ½λ
function solution(sequence) {
var answer = 0;
let sum = 0;
let max = -Infinity;
let min = Infinity;
for (let i = 0; i < sequence.length; i++) {
const s = i % 2 ? sequence[i] : -sequence[i];
sum += s;
if (max < sum) max = sum;
if (min > sum) min = sum;
}
if (max > 0 && min > 0) answer = max;
else if (max < 0 && min < 0) answer = -min;
else answer = Math.abs(max) + Math.abs(min);
return answer;
}