book_time
을 예약 시작 시간이 빠른 순서로 정렬한다.schedule
에서 배정 가능한 방이 있는지 확인한다.schedule
의 길이를 출력한다.function solution(book_time) {
// 시작 시간이 빠른 순으로 정렬한다
book_time.sort(function(a, b){
let aH = +(a[0].slice(0,2));
let bH = +(b[0].slice(0,2));
if(aH !== bH){
return aH - bH;
}
else{
let aM = +(a[0].slice(3,5));
let bM = +(b[0].slice(3,5));
return aM - bM;
}
});
// 같은 방을 쓰려면 두 예약 사이에 최소 10분 간의 텀이 있어야 한다.
// 각 방 별 마지막 예약의 종료 시간
var schedule = [];
book_time.map((time)=>{
let tH = +(time[0].slice(0,2));
let tM = +(time[0].slice(3,5));
let needMoreRoom = true;
for(let i=0;i<schedule.length;i++){
let sH = +(schedule[i].slice(0,2));
let sM = +(schedule[i].slice(3,5));
if((tH - sH)*60 + tM-sM >= 10){
needMoreRoom = false;
schedule[i] = time[1];
break;
}
}
if(needMoreRoom === true){
schedule.push(time[1]);
}
});
return schedule.length;
}
slice()
를 이용해서 문자열을 자르고 +
키워드를 통해 숫자로 변환한다.sort()
를 통해 배열 내 원소를 정렬한다.*`sort()` ; 배열의 요소를 정렬한 후 그 배열을 반환한다. 정렬은 stable sort가 아닐 수 있다. ` arr.sort([compareFunction])` - `compareFunction`: 정렬 순서 정의 함수. 생략 시 문자열로 변환되어 정렬 - ex. banana < cheery, '80' < '9' - 복사본 생성 ❌ 원본 배열 정렬 ⭕️ - `compareFunction(a, b) < 0` ➡️ a < b - `compareFunction(a, b) == 0` ➡️ 그대로 - `compareFunction(a, b) > 0` ➡️ b < a - 숫자 오름 차순 정렬 시에는
function compareNumbers(a, b) {
return a - b;
}
*inschool82@gmail.com 님의 코드를 참고하였습니다.
1. 코드 모듈화 & const 사용
2. 주어진 예약 시간에서 split()
을 이용하여 시간 단위와 분 단위 분리
➡️ 변수 선언 대폭 줆
*
split()
; String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눈다.
- 반환값: 주어진 문자열을 separator 마다 끊은 부분 문자열을 담은 Array. separator 부분은 삭제된다.
split()
split(separator)
- separator가 빈 문자열일 경우 str의 각각의 문자가 배열의 원소 하나씩으로 변환split(separator, limit)
-limit
: 끊어진 문자열의 최대 개수.
function makeMinutes(time){
const [hour, min] = time.split(":").map(el => Number(el));
return hour * 60 + min;
}
function solution(book_time) {
// 시작 시간이 빠른 순으로 정렬한다
book_time = book_time.map(time => {
return time.map(el=>makeMinutes(el))
});
book_time.sort((a,b) => a[0] - b[0]);
var schedule = []; // 각 방 별 마지막 예약의 시작 시간
book_time.map((time)=>{
let needMoreRoom = true;
for(let i=0;i<schedule.length;i++){
if(schedule[i]+10 <= time[0]){ // 예약 간 10분 이상의 텀이 있으면
needMoreRoom = false;
schedule[i] = time[1];
break;
}
}
if(needMoreRoom === true){
schedule.push(time[1]);
}
});
return schedule.length;
}