Algorithm/μΈν”„λŸ°(inflearn)

[ μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript) ] section07 - 9 - κ²°ν˜Όμ‹

YWTechIT 2021. 9. 13. 14:01
728x90

πŸ“ section07 - 9 - κ²°ν˜Όμ‹

ν”Όλ‘œμ—° μž₯μ†Œμ— λ™μ‹œμ— μ‘΄μž¬ν•˜λŠ” μ΅œλŒ€ μΈμ›μˆ˜λ₯Ό κ΅¬ν•˜μ—¬ κ·Έ 인원을 μˆ˜μš©ν•  수 μžˆλŠ” μž₯μ†Œλ₯Ό 빌리렀고 ν•œλ‹€. λ§Œμ•½, μž…λ ₯이 13 15라면 13μ‹œ 정각에 ν”Όλ‘œμ—°μž₯에 μ‘΄μž¬ν•˜κ³  15μ‹œμ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. ν”Όλ‘œμ—°μž₯에 λ™μ‹œμ— μ‘΄μž¬ν•˜λŠ” μ΅œλŒ€ 인원을 좜λ ₯ν•˜λŠ” λ¬Έμ œλ‹€.

 

이 λ¬Έμ œλ„ greedy둜 ν’€ 수 μžˆλŠ” 문제인데, νšŒμ˜μ‹€ λ°°μ •μ²˜λŸΌ μž…λ ₯을 정렬을 ν•˜λ˜, μ •λ ¬ 기쀀을 κ²°ν˜Όμ‹μ— λ“±μž₯ν•˜λŠ” μ‹œκ°„(s), κ²°ν˜Όμ‹μž₯μ—μ„œ λ‚˜κ°€λŠ” μ‹œκ°„(e)으둜 λ‚˜λˆ μ„œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정렬을 ν•΄μ•Ό ν•œλ‹€. μž…λ ₯을 νƒ€μž„λΌμΈ ν˜•μ‹μœΌλ‘œ 그렀보면 λ‹€μŒκ³Ό κ°™λ‹€.

 

 

μ—¬κΈ°μ„œ μ£Όμ˜ν•  점은 λ‚˜κ°„μ‹œκ°„(e)은 ν¬ν•¨ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•  λ•Œ λ“€μ–΄μ˜€λŠ”μ‹œκ°„(s)κ³Ό λ‚˜κ°€λŠ”μ‹œκ°„(e)이 λ™μΌν•˜λ©΄ eκ°€ λ¨Όμ € 였게 μ„€μ •ν•œλ‹€.

 

  1. ν”Όλ‘œμ—°μ— λ“±μž₯ν•˜λŠ” μ‹œκ°„κ³Ό λ‚˜κ°€λŠ” μ‹œκ°„μ„ λ‚˜λˆˆλ‹€.
  2. μ‹œκ°„μ„ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ”λ° μ‹œκ°„μ΄ κ°™λ‹€λ©΄ λ‚˜κ°„ μ‹œκ°„μ„ λ¨Όμ € μ•žμ— μ„Έμš΄λ‹€. (λ‚˜κ°„ μ‹œκ°„μ€ 정각에 μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έ)
  3. λ°˜λ³΅λ¬Έμ„ λŒλ©΄μ„œ sλ₯Ό λ§Œλ‚˜λ©΄ cnt++을 ν•΄μ£Όκ³ , eλ₯Ό λ§Œλ‚˜λ©΄ cnt--λ₯Ό ν•΄μ€€λ‹€.
  4. cnt의 μ΅œλŒ“κ°’μ„ κ°±μ‹ ν•œλ‹€.

 

μ—¬λ‹΄μ΄μ§€λ§Œ, 문자λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜κ³  μ‹ΆμœΌλ©΄ charCodeAt() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 비ꡐ 문자λ₯Ό ASCII μ½”λ“œλ‘œ λ°”κΎΈμ–΄ μ€€ λ‹€μŒ, 값을 비ꡐ해주면 λœλ‹€. μ—¬κΈ°μ„  s의 ASCIIμ½”λ“œλŠ” 115이고, eλŠ” 101μ΄λ―€λ‘œ eκ°€ 더 μž‘λ‹€.

 

 

728x90

 

let n = 5;
let arr = [[14, 18], [12, 15], [15, 20], [20, 30], [5, 14]];

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

function solution(n, arr) {
    let tL = [];

    for (let x of arr) {
        tL.push([x[0], "s"]);
        tL.push([x[1], "e"]);
    }

    tL.sort((a, b) => {
        if (a[0] === b[0]) return a[1].charCodeAt() - b[1].charCodeAt();
        else return a[0] - b[0];
    });

    let cnt = 0;
    let answer = 0;

    for (let x of tL) {
        if (x[1] === "s") cnt++;
        else cnt--;
        answer = Math.max(answer, cnt);
    }
    return answer;
}
λ°˜μ‘ν˜•