https://softeer.ai/class/devcrew/study/resource/detail/description/6266?id=155&resourceId=80
JavaScript | 1초 | 1024MB |
C | 1초 | 1024MB |
C++ | 1초 | 1024MB |
Java | 1초 | 1024MB |
Python | 1초 | 1024MB |
회사에는 N개의 회의실이 있다. 수많은 팀이 모여 토론하고 업무를 처리하기 위해서는 회의실이 필수적이다.
내부망에 아주 간단한 회의실 예약 시스템이 있지만 편의성이 매우 떨어진다. 단순히 예약된 회의의 목록만 표시되기 때문에, 방 별로 비어 있는 시간이 언제인지를 확인하기가 힘든 것이다. 당신은 이를 직접 해결해 보기로 마음 먹었다.
회의실 이용 규칙은 다음과 같다:
- 회의실은 9시부터 18시까지만 사용 가능하다. 모든 회의의 시간은 이 안에 완전히 포함되어야 한다.
- 회의는 정확히 한 회의실을 연속한 일정 시간 동안만 점유한다. 즉 각 회의는 (회의실, 시작 시각, 종료 시각)의 정보로 나타낼 수 있다.
- 회의의 시작과 종료 시각은 시(時, hour) 단위로만 설정 가능하다. 같은 회의실을 사용하는 회의 시간은 서로 겹칠 수 없다. 여기서 겹친다는 것은, 두 회의 모두에 포함되는 시간이 1시간 이상 존재한다는 것을 의미한다. 예를 들어, 10시-12시의 회의와 11시-13시의 회의는 겹치는데, 11시-12시의 시간이 두 회의 모두에 포함되기 때문이다.
- 한 회의가 끝나는 시각에, 같은 회의실에서 다른 회의가 시작하는 것은 허용된다. 이 경우 두 회의가 겹치지 않기 때문이다.
- 길이가 0인 회의, 즉 시작 시각과 종료 시각이 동일한 회의는 예약된 바 없으며, 새롭게 잡을 수도 없다.
이미 예약된 M개의 회의에 대한 정보가 주어지면, 회의실별로 비어 있는 시간대를 정리해 출력하는 프로그램을 작성해 보자. 구체적인 형식은 아래를 참고하시오.
1 ≤ N ≤ 50
1 ≤ M ≤ 100
회의실의 이름은 영문 알파벳 소문자로만 이루어져 있으며 길이는 1 이상 10 이하이다.
주어지는 모든 시각은 9 이상 18 이하이다.
회의의 시작 시각은 회의의 종료 시각을 1시간 이상 앞선다.
첫째 줄에 회의실의 수와 예약된 회의의 수를 나타내는 정수 N과 M이 공백을 사이에 두고 주어진다.
이어 N개의 줄에는 각 회의실의 이름이 주어진다.
이어 M개의 줄에는 각 회의가 배정된 회의실의 이름 r과 시작 시각 s, 그리고 종료 시각 t가 공백을 사이에 두고 주어진다.
각 회의실에 대한 정보를 회의실 이름의 오름차순으로 출력한다.
각 회의실에 대한 정보는 다음과 같다.
첫째 줄에는 { Room 회의실이름: } (중괄호 제외)을 출력한다.
둘째 줄에는 예약가능 시간을 출력한다.
- 예약 가능한 시간대의 개수를 n이라고 할 때, { n available: } (중괄호 제외)을 출력하고, 뒤따른 n개의 줄에 예약 가능한 시간대를 { 09-18 } (하이픈 한개, 중괄호 제외)형태로 출력해야 한다. 한 자리 수의 경우 앞에 0을 붙여 두 자리 수로 만들어야 함에 유의하라.
- 예약 가능한 시간이 없다면, Not available을 출력한다.
각 회의실에 대한 정보 사이에는 ----- (하이픈 다섯 개)로 구분선이 출력되어야 한다.
3 7 grandeur avante sonata sonata 14 16 grandeur 11 12 avante 15 18 sonata 10 11 avante 9 12 grandeur 16 18 avante 12 15
Room avante: Not available ----- Room grandeur: 2 available: 09-11 12-16 ----- Room sonata: 3 available: 09-10 11-14 16-18
3 2 santafe aerocity porter santafe 9 12 porter 9 18
Room aerocity: 1 available: 09-18 ----- Room porter: Not available ----- Room santafe: 1 available: 12-18
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let count = 0;
let n, m;
let roomList = [];
let roomBookList = [];
rl.on('line', function(x) {
if (count == 0) {
[n, m] = x.split(' ').map(Number);
} else {
if (count <= n) {
roomList.push(x);
} else if (count <= n + m) {
let xx = x.split(' ');
roomBookList.push({ r: xx[0], s: Number(xx[1]), t: Number(xx[2]) });
} else {
rl.close();
}
}
count++;
}).on('close', function() {
main();
});
function printF(roomName, p) {
let arr = ['09', '10', '11', '12', '13', '14', '15', '16', '17', '18'];
let alist = []; // 가능 결과
let idx = p;
for (let i = p; i < roomBookList.length; i++) {
let { r, s, t } = roomBookList[i];
let ss = s - 9;
let tt = t - 9;
if (roomName != r) {
idx = i;
break;
}
for (let j = ss; j < tt; j++) {
arr[j] = 'F';
}
}
// console.log('arr: ' + arr)
for (let j = 0; j < arr.length - 1; j++) {//-1은 18시에 시작할 수 없어서.
if (arr[j] != 'F') {
if (arr[j + 1] != 'F') {
let k = j + 1;
while (k < arr.length && arr[k] != 'F') {
k++;
}
k--;
if(k < arr.length - 1){
alist.push([arr[j], (Number(arr[k]) + 1).toString()]);
}else{
alist.push([arr[j], arr[k]]);
}
j = k;
} else {
// if (j + 1 < arr.length) j < arr.length - 1라서 무조건 충족.
alist.push([arr[j], (Number(arr[j]) + 1).toString()]);
// console.log('****' + arr[j], (Number(arr[j]) + 1))
j = j + 1;
}
} else {
continue;
}
}
// console.log('alist:' + alist)
if (alist.length == 0) {
console.log('Not available');
} else {
console.log(alist.length + ' available:');
for (let i = 0; i < alist.length; i++) {
console.log(alist[i][0] + '-' + alist[i][1]);
}
}
return idx;
}
function main() {
roomList = roomList.sort();
roomBookList = roomBookList.sort(function(a, b) {
return a.r.localeCompare(b.r);
});
let nowP = 0;
for (let i = 0; i < roomList.length; i++) {
console.log('Room ' + roomList[i] + ':');
nowP = printF(roomList[i], nowP);
if (i < roomList.length - 1) {
console.log('-----');
}
}
}
'study > 알고리즘 문제 풀이' 카테고리의 다른 글
[javaScript] Softeer - 우물 안 개구리 (0) | 2024.02.04 |
---|---|
[javaScript] Softeer - GBC (0) | 2024.02.04 |
[javaScript] Softeer - 금고털이 (0) | 2024.02.04 |
[javaScript] Softeer - [21년 재직자 대회 예선] 좌석 관리 (0) | 2024.01.30 |
[javaScript] Softter - 징검다리 (0) | 2024.01.11 |