현수는 다음 달에 결혼을 합니다.
현수는 결혼식 피로연을 장소를 빌려 3일간 쉬지 않고 하려고 합니다.
피로연에 참석하는 친구들 N명의 참석하는 시간정보를 현수는 친구들에게 미리 요구했습니다.
각 친구들은 자신이 몇 시에 도착해서 몇 시에 떠날 것인지 현수에게 알려주었습니다.
현수는 이 정보를 바탕으로 피로연 장소에 동시에 존재하는 최대 인원수를 구하여 그 인원을
수용할 수 있는 장소를 빌리려고 합니다. 여러분이 현수를 도와주세요.
만약 한 친구가 오는 시간 13, 가는시간 15라면 이 친구는 13시 정각에 피로연 장에 존재하는
것이고 15시 정각에는 존재하지 않는다고 가정합니다.
Input1 | Output |
---|---|
[[14, 18], [12, 15], [15, 20], [20, 30], [5, 14]] | 2 |
flat()
메서드로 1차원 배열로 만들면, 배열의 원소를 앞에서부터 하나씩 살펴봤을 때 [사람1의 방문시각, 사람2의 방문시각, 사람1의 떠난시각, ...] 이런 배열이 만들어진다.count
를 +1 하고, '떠남'을 포함하고 있을 땐 -1 해서 최대 방문객 수를 구할 수 있다.const solution = (arr) => {
const answer = [];
const visitRecord = [];
let counter = 0;
arr.sort((a,b) => {
if(a[0] === b[0]) return a[1] - b[1];
else return a[0] - b[0];
});
const people = arr.flat();
for(let i = 0; i < people.length; i++) {
if(i % 2 === 0) visitRecord.push([people[i],'s']);
else visitRecord.push([people[i], 'e']);
}
visitRecord.sort((a,b) => a[0]-b[0]);
visitRecord.forEach((record) => {
if(record[1] === 's') {
counter++;
answer.push(counter);
}
else {
counter--;
answer.push(counter);
}
})
const max = Math.max(...answer);
return max;
}