λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm/μΈν”„λŸ°(inflearn)

[ μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript) ] section07 - 8 - νšŒμ˜μ‹€ λ°°μ •(greedy)

by YWTechIT 2021. 9. 11.
728x90

πŸ“ section07 - 8 - νšŒμ˜μ‹€ λ°°μ •(greedy)

이번 λ¬Έμ œλŠ” greedy λ¬Έμ œλ‹€. greedyκ°€ 무엇인지 κΆκΈˆν•˜λ‹€λ©΄ 이전에 μž‘μ„±ν•œ 글을 μ°Έκ³ ν•˜μž. 보톡 μ •λ ¬ λ¬Έμ œμ™€ 자주 짝을 지어 μΆœμ œλ˜λŠ”λ° κ°•μ˜ μ„ μƒλ‹˜κ»˜μ„œ μ •λ ¬ 이후 μˆœμ„œλŒ€λ‘œ ν•˜λ‚˜μ”© μ²˜λ¦¬ν•˜λŠ” λ‘œμ§μ΄λ‚˜ μš°μ„ μˆœμœ„ 큐λ₯Ό μ‚¬μš©ν•˜λŠ” λ‘œμ§μ€ 보톡 κ·Έλ¦¬λ””λ‘œ ν’€λ©΄ λœλ‹€κ³  ν•˜μ…¨λ‹€.

 

 

λ¬Έμ œμ—μ„œ νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•ŠμœΌλ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€μˆ˜μ˜ 회의λ₯Ό 찾으라고 ν–ˆλŠ”λ°, μ΅œλŒ€ν•œ 많이 회의λ₯Ό ν•˜λ €λ©΄ λλ‚˜λŠ” μ‹œκ°„μ΄ 짧은 μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•˜κ³  ν’€μ–΄μ•Ό ν•œλ‹€. λλ‚˜λŠ” μ‹œκ°„μ΄ κΈ΄ μ‹œκ°„λΆ€ν„° ν’€κ²Œ 되면 λ§Œμ•½, ν•΄λ‹Ή μ‹œκ°„μ΄ λλ‚˜κΈ° 전에 2개의 회의λ₯Ό 진행할 수 μžˆλ‹€λ©΄ 손해기 λ•Œλ¬Έμ΄λ‹€.

 

  1. λλ‚˜λŠ” 회의 순으둜 μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•œλ‹€.
  2. 이전 회의 μ’…λ£Œμ‹œκ°„ eT(endTime)=0으둜 μ΄ˆκΈ°ν™” ν•œλ‹€.
  3. ν˜„μž¬ 회의 μ‹œμž‘μ‹œκ°„κ³Ό 이전 회의 μ’…λ£Œμ‹œκ°„μ„ λΉ„κ΅ν•˜μ—¬ ν˜„μž¬ 회의 μ‹œμž‘μ‹œκ°„μ΄ 이전 회의 μ’…λ£Œμ‹œκ°„λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™μœΌλ©΄ 회의λ₯Ό μ§„ν–‰ν•œλ‹€. (x[0]: ν˜„μž¬ 회의 μ‹œμž‘μ‹œκ°„, eT: 이전 회의 μ’…λ£Œμ‹œκ°„) 이후 cnt++
  4. ν˜„μž¬ eTμ—λŠ” x[1](ν˜„μž¬ 회의 μ’…λ£Œμ‹œκ°„)을 ν• λ‹Ήν•œλ‹€.
  5. 반볡문 λκΉŒμ§€ λΉ„κ΅ν•œλ‹€.

 

 

728x90

 

let n = 5;
let arr = [[1, 4], [2, 3], [3, 5], [4, 6], [5, 7]];

console.log(solution(n, arr));

function solution(n, arr) {
    arr.sort((a, b) => {
        if (a[1] === b[1]) return a[0] - b[0];
        else return a[1] - b[1];
    });

    let eT = 0;
    let cnt = 0;

    for (let x of arr) {
        if (eT <= x[0]) {
            eT = x[1];
            cnt++;
        }
    }

    return cnt;
}
λ°˜μ‘ν˜•

λŒ“κΈ€