
๋ฌธ์  ์ค๋ช
์ด๋ฒ ์ถ์์๋ ์์คํ  ์ฅ์ ๊ฐ ์๋ ๋ช ์ ์ ๋ณด๋ด๊ณ ์ถ์ ์ดํผ์น๋ ์๋ฒ๋ฅผ ์ฆ์คํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด๋ค. ์ฅ์ ๋๋น์ฉ ์๋ฒ ์ฆ์ค ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์๋  ์ถ์ ๊ธฐ๊ฐ์ธ 9์ 15์ผ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ํ ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ๊ณ์ฐํด๋ณด๊ธฐ๋ก ํ๋ค. ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ์์ฒญ์ ์๋ต ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์์ ์๊ฐ๋ถํฐ 1์ด(=1,000๋ฐ๋ฆฌ์ด)๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ์ต๋ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
solutio ํจ์์ ์ ๋ฌ๋๋ lines ๋ฐฐ์ด์ N(1 โฆ N โฆ 2,000)๊ฐ์ ๋ก๊ทธ ๋ฌธ์์ด๋ก ๋์ด ์์ผ๋ฉฐ, ๊ฐ ๋ก๊ทธ ๋ฌธ์์ด๋ง๋ค ์์ฒญ์ ๋ํ ์๋ต์๋ฃ์๊ฐ S์ ์ฒ๋ฆฌ์๊ฐ T๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์๋ค.
์๋ต์๋ฃ์๊ฐ S๋ ์๋
 ์ถ์์ธ 2016๋
 9์ 15์ผ๋ง ํฌํจํ์ฌ ๊ณ ์  ๊ธธ์ด 2016-09-15 hh:mm:ss.sss ํ์์ผ๋ก ๋์ด ์๋ค.
์ฒ๋ฆฌ์๊ฐ T๋ 0.1s, 0.312s, 2s ์ ๊ฐ์ด ์ต๋ ์์์  ์
์งธ ์๋ฆฌ๊น์ง ๊ธฐ๋กํ๋ฉฐ ๋ค์๋ ์ด ๋จ์๋ฅผ ์๋ฏธํ๋ s๋ก ๋๋๋ค.
์๋ฅผ ๋ค์ด, ๋ก๊ทธ ๋ฌธ์์ด 2016-09-15 03:10:33.020 0.011s์ "2016๋
 9์ 15์ผ ์ค์  3์ 10๋ถ 33.010์ด"๋ถํฐ "2016๋
 9์ 15์ผ ์ค์  3์ 10๋ถ 33.020์ด"๊น์ง "0.011์ด" ๋์ ์ฒ๋ฆฌ๋ ์์ฒญ์ ์๋ฏธํ๋ค. (์ฒ๋ฆฌ์๊ฐ์ ์์์๊ฐ๊ณผ ๋์๊ฐ์ ํฌํจ)
์๋ฒ์๋ ํ์์์์ด 3์ด๋ก ์ ์ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ์๊ฐ์ 0.001 โฆ T โฆ 3.000์ด๋ค.
lines ๋ฐฐ์ด์ ์๋ต์๋ฃ์๊ฐ S๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด ์๋ค.
solution ํจ์์์๋ ๋ก๊ทธ ๋ฐ์ดํฐ lines ๋ฐฐ์ด์ ๋ํด ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ ๋ฆฌํดํ๋ค.์์ 1
์
๋ ฅ: [
"2016-09-15 01:00:04.001 2.0s",
"2016-09-15 01:00:07.000 2s"
]
์ถ๋ ฅ: 1
์์ 2
์
๋ ฅ: [
"2016-09-15 01:00:04.002 2.0s",
"2016-09-15 01:00:07.000 2s"
]
์ถ๋ ฅ: 2
์ค๋ช
: ์ฒ๋ฆฌ์๊ฐ์ ์์์๊ฐ๊ณผ ๋์๊ฐ์ ํฌํจํ๋ฏ๋ก
์ฒซ ๋ฒ์งธ ๋ก๊ทธ๋ 01:00:02.003 ~ 01:00:04.002์์ 2์ด ๋์ ์ฒ๋ฆฌ๋์์ผ๋ฉฐ,
๋ ๋ฒ์งธ ๋ก๊ทธ๋ 01:00:05.001 ~ 01:00:07.000์์ 2์ด ๋์ ์ฒ๋ฆฌ๋๋ค.
๋ฐ๋ผ์, ์ฒซ ๋ฒ์งธ ๋ก๊ทธ๊ฐ ๋๋๋ ์์ ๊ณผ ๋ ๋ฒ์งธ ๋ก๊ทธ๊ฐ ์์ํ๋ ์์ ์ ๊ตฌ๊ฐ์ธ 01:00:04.002 ~ 01:00:05.001 1์ด ๋์ ์ต๋ 2๊ฐ๊ฐ ๋๋ค.
์์ 3
์
๋ ฅ: [
"2016-09-15 20:59:57.421 0.351s",
"2016-09-15 20:59:58.233 1.181s",
"2016-09-15 20:59:58.299 0.8s",
"2016-09-15 20:59:58.688 1.041s",
"2016-09-15 20:59:59.591 1.412s",
"2016-09-15 21:00:00.464 1.466s",
"2016-09-15 21:00:00.741 1.581s",
"2016-09-15 21:00:00.748 2.31s",
"2016-09-15 21:00:00.966 0.381s",
"2016-09-15 21:00:02.066 2.62s"
]
์ถ๋ ฅ: 7
์ค๋ช
: ์๋ ํ์๋ผ์ธ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ์์ผ๋ก ํ์๋ 1์ด ๊ฐ ๊ตฌ๊ฐ์ ์ฒ๋ฆฌ๋์ ๊ตฌํด๋ณด๋ฉด (1)์ 4๊ฐ, (2)๋ 7๊ฐ, (3)๋ 2๊ฐ์์ ์ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋น ์ต๋ ์ฒ๋ฆฌ๋์ 7์ด ๋๋ฉฐ, ๋์ผํ ์ต๋ ์ฒ๋ฆฌ๋์ ๊ฐ๋ 1์ด ๊ตฌ๊ฐ์ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ  ์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ์์๋ ๊ตฌ๊ฐ์ด ์๋ ๊ฐ์๋ง ์ถ๋ ฅํ๋ค.

๋์ ํ์ด
function solution(lines) {
    // ์๊ฐ ๊ธฐ๋ก์ ๋ด์ ๋ฐฐ์ด
    const records = []
    // ์ ๋ต์ ๊ธฐ๋กํ  ๋ณ์
    let answer = 0
    // ํ์ฌ ์คํ๋๊ณ  ์๋ ์์ฒญ์ ์๋ฅผ ๊ธฐ๋กํ  ๋ณ์
    let running = 0
    lines.forEach(line => {
        const [date, time, work] = line.split(" ")
        const milli = toMilliSeconds(time)
        const startTime = milli - (work.substr(0,work.length-1) * 1000 )
        /* 
        ํด๋น ๋ฌธ์ ์์๋ 1์ด๋์ ๋ผ๊ณ  ํจ์ 0 ~ 0.999์ด๊น์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฆ 01:00:04.001 ~ 01:00:05.001๋ 1.001์ด ๋์์ ์๋ฏธํ๊ณ  01:00:04.001๋ถํฐ 1์ด๋์์ ๊ตฌ๊ฐ์ 01:00:04.001 ~ 01:00:05.000์ด ๋์ด์ผ ํ๋ฏ๋ก 1๋ฐ๋ฆฌ์ด๋ฅผ ๋บ๋๋ค.
        */
        const endTime = milli + 999
        records.push(['Start', startTime])
        records.push(['End', endTime])
    })
    
    // ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋, ์๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ข
๋ฃ ์๊ฐ ๋ง์  ์์์๊ฐ์ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ์์์๊ฐ์ด ๋จผ์  ์ค๊ณ  ์ข
๋ฃ๋๋ค.
    records.sort((prev,next) => prev[1] !== next[1] ? prev[1]-next[1] : next[0] - prev[0])
    
    records.forEach(record => {
        if(record[0] === 'Start') running++
        else running--
        
        answer = Math.max(answer,running)
    })
    
    return answer
}
function toMilliSeconds(time) {
    const [hour,minute,seconds] = time.split(":")
    const [sec,mili] = seconds.split(".")
    let sumSeconds = 0
    // ์๊ฐ์ ์ด๋ก ๋ณํ
    sumSeconds+=Number(hour)*60*60
    // ๋ถ์ ์ด๋ก ๋ณํ
    sumSeconds+=Number(minute)*60
    // ์ด๋ฅผ ๋ํด์ค
    sumSeconds+=Number(sec)
    // ๋ฐ๋ก์ด๋ก ๋ณํ
    sumSeconds*=1000
    return sumSeconds+Number(mili)
}