ν‹°μŠ€ν† λ¦¬ λ·°

문제

ν•œ 개의 νšŒμ˜μ‹€μ΄ μžˆλŠ”λ° 이λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” n개의 νšŒμ˜λ“€μ— λŒ€ν•˜μ—¬ νšŒμ˜μ‹€ μ‚¬μš©ν‘œλ₯Ό λ§Œλ“€ λ €κ³  ν•œλ‹€. 각 νšŒμ˜μ— λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ Έ 있고, 각 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜ λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€μˆ˜μ˜ 회의λ₯Ό 찾아라. 단, νšŒμ˜λŠ” ν•œλ²ˆ μ‹œμž‘ν•˜λ©΄ 쀑간에 쀑 단될 수 μ—†μœΌλ©° ν•œ νšŒμ˜κ°€ λλ‚˜λŠ” 것과 λ™μ‹œμ— λ‹€μŒ νšŒμ˜κ°€ μ‹œμž‘λ  수 μžˆλ‹€.

 

λ¬Έμ œν’€μ΄

  1. μ‹œμž‘ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ 순차 탐색을 λŒμ•„μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 자료ꡬ쑰λ₯Ό μ •λ ¬_ μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 같을 κ²½μš°λ„ 있기 λ•Œλ¬Έ
  2. ν˜„μž¬ μ°Έμ‘°ν•˜κ³  μžˆλŠ” 회의 μ’…λ£Œμ‹œκ°„λ³΄λ‹€ 회의 μ‹œμž‘μ‹œκ°„μ΄ κ°™κ±°λ‚˜ 클 경우 회의 κ°€λŠ₯
  3. νšŒμ˜κ°€ κ°€λŠ₯ν•œ 회의 μ‹œμž‘μ‹œκ°„μ„ κ·Έ λ‹€μŒ μ’…λ£Œμ‹œκ°„μœΌλ‘œ λ³€κ²½

μ½”λ“œ

function solution(...arr) {
  let answer = 0;
  arr.sort((a, b) => a[0] - b[0]); //회의 μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬

  for(let i = 0; i < arr.length; i++) {
    let tmp = arr[i][1]; //회의 μ’…λ£Œμ‹œκ°„
    let count = 1;
    for(let j = i + 1; j < arr.length; j++) {
      if(arr[j][0] >= tmp) { //νšŒμ˜κ°€ 이전 νšŒμ˜κ°€ μ’…λ£Œλœ μ‹œκ°„λŒ€μΌ 경우
        tmp = arr[j][1]; //회의 μ’…λ£Œμ‹œκ°„ λ³€κ²½
        count++;
      }
    }
    answer = Math.max(answer, count);
  }
  
  return answer;
}

console.log(solution([1, 4], [2,3], [3,5], [4,6], [5,7]));

 

μ˜€λ‹΅

νƒμš•(그리디) μ•Œκ³ λ¦¬μ¦˜(Greedy algorithm)

  • μ΅œμ ν•΄λ₯Ό κ΅¬ν•˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•˜λŠ” 방법
  • μ—¬λŸ¬ 경우 쀑 ν•˜λ‚˜λ₯Ό 선택할 λ•Œ 그것이 κ·Έ μƒν™©μ—μ„œ κ°€μž₯ μ’‹λ‹€κ³  μƒκ°ν•˜λŠ” 것을 선택해 λ‚˜κ°€λŠ” 방식
  • κ°€μž₯ 쒋은 κ²°κ³Όλ₯Ό μ–»λŠ” 것이 보μž₯λ˜λŠ” 것은 μ•„λ‹˜

κ°€μž₯ λ§Žμ€ 회의λ₯Ό ν•΄μ•Όλ˜λŠ” 상황 μ†μ—μ„œ μœ„μ˜ 문제 풀이와 같이 μ‹œμž‘ μ‹œκ°„μ„ μ •λ ¬ κΈ°μ€€μœΌλ‘œ μ‚Όκ²Œ λœλ‹€λ©΄ λ‹€μŒ κ·Έλ¦Όκ³Ό 같은 λ¬Έμ œκ°€ 생긴닀.

μ‹œμž‘μ‹œκ°„ 및 회의 μ‹œκ°„μ΄ 짧은 κΈ°μ€€ μ •λ ¬

μ‹œμž‘μ‹œκ°„μ΄λ‚˜ 회의 μ‹œκ°„μ΄ κ°€μž₯ 짧은 μˆœλŒ€λ‘œ 정렬을 ν•˜κ²Œ 될 경우 νšŒμ˜κ°€ κ°€λŠ₯ν•œ μ‹œκ°„λŒ€μ˜ 기회λ₯Ό λ†“μΉ˜κ²Œ λ˜λŠ” λ¬Έμ œκ°€ 생겨 졜적의 κ²°κ³Όλ₯Ό μ‚°μΆœν•˜μ§€ λͺ»ν•œλ‹€.

 

λ˜ν•œ λ¬Έμ œμ—μ„œ 쑰건 쀑 회의 μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 같은 κ²½μš°κ°€ μžˆλ‹€.

μ΄λ•ŒλŠ” μ’…λ£Œμ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜κ²Œ λœλ‹€λ©΄ λ§ˆμ§€λ§‰ μ‹œκ°„λŒ€(μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 같은 경우)의 회의만 μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 졜적의 κ²°κ³Όλ₯Ό μ‚°μΆœν•˜μ§€ λͺ»ν•œλ‹€. 

이λ₯Ό μœ„ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 같은 κ²½μš°μ—λŠ” μ‹œμž‘μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•΄μ•Ό ν•œλ‹€.

 

μ½”λ“œ

function solution(arr){
                let answer=0;
                arr.sort((a, b)=>{
                    if(a[1]===b[1]) return a[0]-b[0]; //νšŒμ˜μ‹œκ°„κ³Ό μ’…λ£Œμ‹œκ°„μ΄ 같을 κ²½μš°μ—λ§Œ μ‹œμž‘μ‹œκ°„μœΌλ‘œ μ •λ ¬
                    else return a[1]-b[1];
                })
                let et=0; 
                for(let x of arr){
                    if(x[0]>=et){
                        answer++;
                        et=x[1];
                    }
                }
                return answer;
            }

            let arr=[[1, 4], [2, 3], [3, 5], [4, 6], [5, 7]];
            console.log(solution(arr));

'μ•Œκ³ λ¦¬μ¦˜ > νƒœκ·Έ 별 풀이' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

이뢄탐색  (0) 2021.07.25
[그리디]κ²°ν˜Όμ‹  (0) 2021.07.24
μ’Œν‘œ μ •λ ¬  (0) 2021.07.22
μž₯λ‚œκΎΈλŸ¬κΈ° ν˜„μˆ˜  (0) 2021.07.21
Least Recently Used  (0) 2021.07.20
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
κΈ€ 보관함