[백준]1931 : 회의실배정

woo·2022년 4월 14일

백준

목록 보기
2/28

🚩 문제 링크
💻사용언어 : python, js
🤔그리디 알고리즘

🌱 문제풀이

회의가 많이 열리기 위해서는 시작시간 ~ 종료시간이 짧아야한다. 또한 이전 회의 종료 시간과 다음 회의 시작 시간 사이의 텀이 짧아야한다.
빨리 시작하고 빨리 끝나는 회의로 구성해야한다!

먼저 시작, 종료 시간을 2차원 리스트로 저장한 후,
1. 시작시간 오름차순 정렬,
2. 종료시간 오름차순 정렬
처음에는 hourlist[0]요소를 선택하고 이후는 다음 회의의 시작시간과 이전 회의의 종료시간을 비교한다.

👉 python

n = int(input())
hourlist = list()

for i in range(n):
    startHour, endHour = map(int, input().split())
    hourlist.append([startHour, endHour])

hourlist.sort(key = lambda x: x[0]) 
hourlist.sort(key = lambda x: x[1])
#[[1, 4],[3, 5],[0, 6],[5, 7],[3, 8],[5, 9],[6, 10],[8, 11],[8, 12],[2, 13],[12, 14]]
count = 1
end_time = hourlist[0][1]

for i in range(1, n): #두번째 회의부터 n번째(마지막)회의까지 for문 돌리기
  if end_time <= hourlist[i][0]:
    end_time = hourlist[i][1]
    count += 1

print(count)

👉 js

const fs = require('fs');
let input = fs.readFileSync('Q1931/input.txt').toString().split('\n');
const meeting_number = input[0] // 회의의 수
console.log(meeting_number)

let hour = input.slice(1,);
console.log(hour);

// 2차원 배열로 변환
let hour_list = [];
for(i of hour){
    hour_list.push(i.split(' ').map((el) => parseInt(el)));
}
console.log(hour_list)

/*
score.sort(function(a, b) { // 오름차순
    return a - b;
});

score.sort(function(a, b) { // 내림차순
    return b - a;
});
*/

hour_list.sort(function(a,b){ // 시작시간이 같을 경우는 오름차순
    if(a[1] === b[1]){
        return a[0] - b[0]
    }
    else{
        return a[1] - b[1];
    }
})
console.log(hour_list)

let count = 1;
let end_time = hour_list[0][1];

// 두번째 회의부터, 회의 시작 끝나는 시간과 시작 시간 비교
for(let i = 1; i < meeting_number; i++){
    if(end_time <= hour_list[i][0]){
        end_time = hour_list[i][1];
        count += 1;
    }
}
console.log(count);
profile
🌱 매일 성장하는 개발자

0개의 댓글