๋ฌธ์ ์ค๋ช
์ด๋ฒ ์ถ์์๋ ์์คํ ์ฅ์ ๊ฐ ์๋ ๋ช ์ ์ ๋ณด๋ด๊ณ ์ถ์ ์ดํผ์น๋ ์๋ฒ๋ฅผ ์ฆ์คํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด๋ค. ์ฅ์ ๋๋น์ฉ ์๋ฒ ์ฆ์ค ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ์๋ ์ถ์ ๊ธฐ๊ฐ์ธ 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)
}