https://programmers.co.kr/learn/courses/30/lessons/17676#qna
โถ ์ฝ๋ :
function solution(lines) {
let answer = 0;
let data = [];
let minTime = 100000000;
let maxTime = 0;
for (const line of lines)
{
var temp = line.split(' ');
var time = temp[1].split(':');
var h = parseInt(time[0]) * 3600;
var m = parseInt(time[1]) * 60;
var s = parseFloat(time[2]);
var endTime = (h + m + s) * 1000;
var startTime = endTime - (parseFloat(temp[2].split('s').join(''))*1000 - 1);
data.push([startTime, endTime]);
}
// ๋ฌธ์์ด์ ์ซ์๋ก ๋ฐ๊พธ์ด ์ ์ฅ
// ์ด๋ก ๋ณํํด์ ํด๋ณด์
let count = 0;
for (let i =0; i < data.length; i++)
{
let boundL = data[i][1];
let boundR = boundL + 999;
let temp = 1;
for (let j = i+1; j<data.length; j++)
{
if (data[j][0] > boundR)
{
continue;
}
else
{
temp+=1;
}
}
if (temp > count)
{
count = temp;
}
}
return count;
}
โถ ๋ฌธ์ ํ์ด :
1. ์ด๊ธฐ ๊ฐ๊ฐ์ ๋ก๊ทธ ์ ๋ณด ๋ฌธ์์ด๋ค์ ๋ํด ์๊ฐ์ ์ด์ ๋์ ์ผ๋ก ๋ณํํ๋ค.
- ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ ์์์ ์ ์งธ์๋ฆฌ๊น์ง ๋ํ๋ ์๊ธฐ์ 1000์ ๊ณฑํ์ฌ ์ ์ํํ๋ก ๋ณํํ๋ค ์์์๊ฐ๊ณผ ๋์๊ฐ์ ์ด(second)๋์ ๊ฐ์ data ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
2. ์ด์ ํด๋น ๊ฐ๋ค์ ์ด์ฉํด ํ์ํ์ฌ 1์ด๋์ ์ฒ๋ฆฌ๋ ๋ก๊ทธ์์ ์ต๋๊ฐ์ ์ฐพ์์ผํ๋๋ฐ ์ด๊ธฐ ์์ ํ์์ ์ด์ฉํด ๊ตฌํํ์ผ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋์๋ค.
3. ์ด๋ก์ธํด ๋ก์ง์ ๋ณํ๋ฅผ ์ฃผ์ด์ผ ํ๊ณ , ์ข ๋ฃ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์๋ ์ ๋ ฌ๋ ๋ฐ์ดํฐ(lines)์์ ์ฐฉ์ํ์ฌ ๊ฐ ๋ก๊ทธ์ ์ข ๋ฃ์๊ฐ์ ์์์๊ฐ์ผ๋ก ํ์ฌ 1์ด ๋ด์ ๋ก๊ทธ์ ์๋ฅผ ํ์ํ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
4. ์ดํ ๊ฐ๊ฐ์ ๊ตฌ๊ฐ๋ณ๋ก ๋ค๋ฅธ ๋ก๊ทธ๋ค(ํ์ฌ ์์๊ฐ์ด ๋๋ ๋ก๊ทธ์ ์ดํ ์ฒ๋ฆฌ๋ ๋ก๊ทธ๋ค)๊ณผ ๋น๊ตํ์ฌ ๋ง์ผ ํ์ฌ 1์ด๊ตฌ๊ฐ์ ๋ง์ง๋ง์๊ฐ(boundR)๋ณด๋ค ํด๋น ๋ก๊ทธ์ ์์์๊ฐ(data[j][0])์ด ํฐ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด count๋ฅผ ์ฌ๋ ค์ฃผ์๋ค.
- ์์ ๊ฐ์ด ๋ก๊ทธ๊ฐ ์ข ๋ฃ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด ์๋ค๋ฉด, ๊ฐ ๋ก๊ทธ์ ์ข ๋ฃ๊ฐ ๊ธฐ์ค 1์ด๋ด ๋ค๋ฅธ ๋ก๊ทธ๋ค๊ณผ ๊ฒน์น๋ ํ์๋ฅผ ์ธ๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ count๊ฐ์ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
โถ ์คํจ ์ฝ๋ => ๊ฒฝ์ฐ๊ฐ ๋ค๋ฅด๋ค.
์ด๊ฒฝ์ฐ๋ ๋ก๊ทธ์๊ฐ์ด ์ข ๋ฃ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ด ์๋๋ ์์ ํ์์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ
let count = 0;
// ๋ก๊ทธ ์ค ์ด๋ค ๋ก๊ทธ์๊ฐ์ endtime์ผ๋ก๋ถํฐ 1์ด๋ด์ ํด๋น ์๊ฐ์ด ํฌํจ๋๋์ง๋ฅผ ํ์ธํ๋ฉด ํ์ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
// ํ์ฌ ๋ฐฉ์์ ๋ก๊ทธ์๊ฐ์ด ์ข
๋ฃ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ์๋๋์ ๊ฒฝ์ฐ์
for (let i = minTime; i <= maxTime; i++ )
{
let boundL = i;
let boundR = i + 999;
let temp = 0;
for (const times of data)
{
if (times[1] < boundL || times[0] > boundR){
continue;
}
else
{
temp += 1;
}
}
if (temp > count)
{
count = temp;
}
}
'๐ฏ CodingTest > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] (Javascript) ์์ ๊ฒ์ (2) | 2022.05.02 |
---|---|
[Programmers] (Javascript) ๋ฉ๋ด ๋ฆฌ๋ด์ผ (0) | 2022.04.28 |
[Programmers] (Javascript) ํํ (0) | 2022.04.25 |
[Programmers] (Javascript) ์์ ์ต๋ํ (0) | 2022.04.25 |
[Programmers] (Javascript) ๋ด์ค ํด๋ฌ์คํฐ๋ง (0) | 2022.04.25 |