| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 2503번
- node.js
- 20365번
- 나이트의이동
- 5014번
- 20300번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 1926번
- 토마토
- 타입스크립트
- javascript
- 1541번
- 17626번
- 2422번
- 16953번
- 13913번
- 정리
- 123만들기
- 백준
- 14940번
- 알고리즘
- 7526번
- 자바스크립트
- 5427번
- 16439번
- 맥주마시면서걸어가기
- 1969번
- 타입스크립트 프로그래밍
- 풀이
- 6593번
Archives
- Today
- Total
Sqsung DevLog
[백준] 1931번: 회의실 배정 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 1931번: 회의실 배정 (난이도: Silver I)
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const N = +input.shift();
const meetingTimes = input.map(time => time.split(' ').map(val => +val));
const getMaxMeetings = (N, meetings) => {
let answer = 1;
// 💡 종료 시간이 같은 경우에는 시작 시간을 기준으로 정렬한다
meetings.sort((a, b) => (a[1] === b[1] ? a[0] - b[0] : a[1] - b[1]));
let finishTime = meetings[0][1];
for (let i = 1; i < N; i++) {
if (finishTime > meetings[i][0]) continue;
finishTime = meetings[i][1];
answer += 1;
}
return answer;
};
console.log(getMaxMeetings(N, meetingTimes));
2-1. 풀이 설명
회의 종료 시간이 같은 경우에는 올바르게 정렬되지 않을 확률이 있다. 대신 아래와 같이 정렬하면 된다.
A) 종료 시간이 같지 않은 경우에는 종료 시간을 기준으로 오름차순 정렬
B) 종료 시간이 같은 경우에는 시작 시간을 기준으로 오름차순 정렬
이후 첫 회의의 종료 시간(finishTime)을 기준으로 잡고 1번 째 index에 위치한 회의부터 순회한다. 이때 순회 중인 회의의 시작 시간이 finishTime과 같거나 더 크면 finishTime을 업데이트 하고 answer를 1씩 증가한다.
'Algorithm' 카테고리의 다른 글
| [백준] 14503번: 로봇 청소기 - Node.js (자바스크립트) (0) | 2023.06.21 |
|---|---|
| [백준] 1541번: 잃어버린 괄호 - Node.js (자바스크립트) (0) | 2023.06.20 |
| [백준] 20365번: 블로그2 - Node.js (자바스크립트) (0) | 2023.06.16 |
| [백준] 17626번: Four Squares - Node.js (자바스크립트) (0) | 2023.06.15 |
| [백준] 14501번: 퇴사 - Node.js (자바스크립트) (0) | 2023.06.15 |