ALGORITHM/Inflearn

회의실 배정 (그리디 알고리즘)

Harimad 2022. 3. 20. 15:59

문제

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

입력설명:
첫째 줄은 회의의 수(n)이다. 
둘째 줄부터 n+1줄까지 각 회의 정보인데, 공백을 사이에 두고 시작시작과 끝시간이 주어진다.
회의 시작시간과 끝나는 시간의 조건은 (시작시간 <= 끝나는 시간)이다.

입력예제 1

1 4
2 3 
3 5 
4 6
5 7
출력예제 1 - 첫째 줄에 최대 사용할 수 있는 회의 수 출력
3
예제설명 (2, 3), (3, 5), (5, 7)이 회의실을 이용할 수 있다.

입력예제 2

3 3 
1 3 
2 3
출력예제 2 
2
예제설명 (1, 3), (3, 3) 이 회의실을 이용할 수 있다.

 

 

풀이

1. solution 함수에 입력받은 meeting인자의 끝나는 시간을 오름차순으로 정렬한다.

1-1. 만약 meeting인자의 sort메서드 과정중에 끝나는 시간이 같다면, 시작시간을 기준으로 오름차순으로 정렬한다.

2. 처음 끝나는 시간을 0으로 변수(el)설정한다.

3. 정렬된 meeting 배열을 반복 순회 한다.

3-1. 만약 시작 시간이 끝나는 시간(el)보다 크거나 같을땐 answer를 1 올려주고 끝나는 시간(el)을 지금 요소의 끝나는 시간으로 바꿔준다.

 

 

 

코드

function solution(meeting){
  let answer = 0;
  meeting.sort((a, b) => { // 1
    if (a[1] === b[1]) return a[0]-b[0]  // 1-1
    return a[1]-b[1]
  })
  console.log(meeting) // [ [2, 3],[1, 4],[3, 5],[4, 6],[5, 7] ]
  let el = 0;  // 2
  for (let x of meeting) {  // 3
    if (x[0] >= el) {  // 3-1
      answer++;
      el = x[1];
    }
  }

  return answer;
}

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

 

출처

 

자바스크립트 알고리즘 문제풀이(코딩테스트 대비) - 인프런 | 강의

자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., - 강의

www.inflearn.com

 

Reference

[백준1931] 회의실 배정 (그리디 알고리즘) : https://www.acmicpc.net/problem/1931


 

 

탐욕법(그리디) 알고리즘

탐욕법(이하 '그리디') 알고리즘이란 현재 상황에서 가장 좋은 것(최선의 선택)을 고르는 알고리즘을 말합니다. 그리디 알고리즘은 동적 프로그래밍을 간단한 문제 해결에 사용하면 지나치게 많

velog.io

 

 

JavaScript로 greedy algorithm(탐욕 알고리즘) 구현하기

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

velog.io