본문 바로가기
DEV/알고리즘 문제 풀이

[백준] 1931 회의실 배정

by krokerdile 2025. 2. 24.
728x90
const fs = require('fs');
const filePath = process.platform === 'linux' ? 'dev/stdin' : '../input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');

let N = parseInt(input.shift());

let list = [];

for (let i = 0; i < N; i++) {
  list.push(input[i].split(' ').map(Number));
}

//N개의 회의에 대해서 회의실 사용표
//한 개의 회의실이 있을 때 최대로 사용할 수 있는 경우
list = list.sort((a, b) => {
  if (a[1] === b[1]) {
    return a[0] - b[0];
  } else {
    return a[1] - b[1];
  }
});

let answer = 0;

let end = 0;
list.forEach((time) => {
  if (time[0] >= end) {
    answer++;
    end = time[1];
  }
});

console.log(answer);

최근에는 solved.ac에서 제공하는 클래스에 해당 하는 문제들을 풀이하고 있습니다. 그 중에서 클래스 3에 해당 하는 1931번 '회의실 배정' 문제를 풀고 간단하게 풀이 과정을 남기려고 합니다.

처음에 문제를 봤을 때는 이전에 봤던 회의실 배정에 관련된 문제를 참고해서 일단 정렬을 하면 되지 않을까 라고 생각을 했습니다. 일종의 그리디 문제라고 생각을 했기 때문입니다. 그래서 정렬을 해두고 하나씩 범위를 노트에 그려보다가 가장 쉬운 방법이 끝나는 시간을 기준으로 가장 많이 넣을 수 있는 경우가 답에 해당 한다는 점이었습니다. 그래서 회의실이 끝나는 시간을 기준으로 먼저 정렬을 하고, 동일한 경우에는 시작하는 시간으로 정렬 할 수 있도록 했습니다.

그리고 끝나는 시간을 계속해서 업데이트 해가면서 회의실을 배정해주는 방식으로 문제를 풀어줬는데 생각보다 빠르게 정답을 찾을 수 있었습니다. 

728x90
반응형