회의실배정 - greedy(탐욕)_알고리즘

원동휘·2022년 12월 10일
0

NOTE - 코테

목록 보기
29/42

문제

한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들 려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하 면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중 단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.

▣ 입력설명

첫째 줄에 회의의 수 n(1<=n<=100,000)이 주어진다. 둘째 줄부터 n+1 줄까지 각 회의의 정 보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 회의의 시작시간과 끝나는 시간의 조건은 (시작시간 <= 끝나는 시간)입니다.
▣ 출력설명
첫째 줄에 최대 사용할 수 있는 회의 수를 출력하여라.
▣ 입력예제 1 5
14
23
35 46 57
▣ 출력예제 1 3
예제설명
(2, 3), (3, 5), (5, 7)이 회의실을 이용할 수 있다.
▣ 입력예제 2 3
33
13
23
▣ 출력예제 2 2
[자바스크립트 알고리즘 문제풀이]

greedy(탐욕)_알고리즘
탐욕 알고리즘은 말 그대로 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에
도달하는 방법이다.

풀이
greedy(탐욕) 알고리즘으로 풀이,
sort메소드를 이용해 회의실을 index1번째(끝나는시간) 기준으로 오름차순 정렬을 진행,
끝나는시간 기준 오름차순정렬에서 매번 반복을 돌면서 endTime에
endTime <= sorted[i][0] 조건에 따라 가장 작은 끝나는시간을 넣어주고 count를 증가시킴으로
매번 endTime은 회의실 끝나는시간으로 갱신되고, 회의실 시작시간을 endTime과 비교하는
당장 눈앞에 최적의 상황을 쫒는 그리디 방식으로 구현한 풀이.

// 회의실 배정
function solution(arr) {
  let count = 0;
  let endTime = 0;

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

  for (let i = 0; i < sorted.length; i++) {
    if (endTime <= sorted[i][0]) {
      endTime = sorted[i][1];
      count++;
    }
  }
  return count;
}

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

console.log(
  solution([
    [1, 3],
    [2, 3],
    [3, 3],
  ])
);
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글