๐งก๋ฌธ์ ์ค๋ช
์นด์นด์คTV
์์ ์ ๋ช
ํ ํฌ๋ฆฌ์์ดํฐ๋ก ํ๋ ์ค์ธ ์ฃ ๋ฅด๋
๋ ํ๊ฒฝ ๋จ์ฒด๋ก๋ถํฐ ์์ ์ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ๋์์์ ์ง๊ตฌ์จ๋ํ์ ์ฌ๊ฐ์ฑ์ ์๋ฆฌ๊ธฐ ์ํ ๊ณต์ต๊ด๊ณ ๋ฅผ ๋ฃ์ด ๋ฌ๋ผ๋ ์์ฒญ์ ๋ฐ์์ต๋๋ค. ํ์์ ํ๊ฒฝ ๋ฌธ์ ์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๋ "์ฃ ๋ฅด๋"๋ ์์ฒญ์ ๋ฐ์๋ค์๊ณ ๊ด๊ณ ํจ๊ณผ๋ฅผ ๋์ด๊ธฐ ์ํด ์์ฒญ์๋ค์ด ๊ฐ์ฅ ๋ง์ด ๋ณด๋ ๊ตฌ๊ฐ์ ๊ณต์ต๊ด๊ณ ๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํฉ๋๋ค. "์ฃ ๋ฅด๋"๋ ์์ฒญ์๋ค์ด ํด๋น ๋์์์ ์ด๋ค ๊ตฌ๊ฐ์ ์ฌ์ํ๋ ์ง ์ ์ ์๋ ์ฌ์๊ตฌ๊ฐ ๊ธฐ๋ก์ ๊ตฌํ๊ณ , ํด๋น ๊ธฐ๋ก์ ๋ฐํ์ผ๋ก ๊ณต์ต๊ด๊ณ ๊ฐ ์ฝ์
๋ ์ต์ ์ ์์น๋ฅผ ๊ณ ๋ฅผ ์ ์์์ต๋๋ค.
์ฐธ๊ณ ๋ก ๊ด๊ณ ๋ ์ฌ์ ์ค์ธ ๋์์์ ์ค๋ฅธ์ชฝ ์๋์์ ์๋ ์์๊ณผ ๋์์ ์ฌ์๋๋
PIP(Picture in Picture) ํํ๋ก ์ ๊ณต๋ฉ๋๋ค.
๋ค์์ "์ฃ ๋ฅด๋"๊ฐ ๊ณต์ต๊ด๊ณ ๊ฐ ์ฝ์ ๋ ์ต์ ์ ์์น๋ฅผ ๊ณ ๋ฅด๋ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ ๊ฒ์ ๋๋ค.
02์๊ฐ 03๋ถ 55์ด
์
๋๋ค.00์ 25๋ถ 50์ด
๋ถํฐ 00์ 48๋ถ 29์ด
๊น์ง ์ด 00์๊ฐ 22๋ถ 39์ด
๋์ ์ฃ ๋ฅด๋์ ๋์์์ ์ฌ์ํ์ต๋๋ค.ยน01์ 20๋ถ 15์ด
๋ถํฐ 01์ 45๋ถ 14์ด
๊น์ง ์ด 00์๊ฐ 24๋ถ 59์ด
๋์ ์ฃ ๋ฅด๋์ ๋์์์ ์ฌ์ํ์ต๋๋ค.00์๊ฐ 14๋ถ 15์ด
๋ผ๋ฉด, ์์ ๊ทธ๋ฆผ์ฒ๋ผ 01์ 30๋ถ 59์ด
๋ถํฐ 01์ 45๋ถ 14์ด
๊น์ง ๊ณต์ต๊ด๊ณ ๋ฅผ ์ฝ์
ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด ๊ตฌ๊ฐ์ ์์ฒญํ ์์ฒญ์๋ค์ ๋์ ์ฌ์์๊ฐ์ด ๊ฐ์ฅ ํฌ๊ธฐ ๋๋ฌธ์
๋๋ค.01์ 30๋ถ 59์ด
๋ถํฐ 01์ 45๋ถ 14์ด
๊น์ง์ ๋์ ์ฌ์์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ฉ๋๋ค.01์ 30๋ถ 59์ด
๋ถํฐ 01์ 37๋ถ 44์ด
๊น์ง : 4๋ฒ, 1๋ฒ ์ฌ์ ๊ธฐ๋ก์ด ๋์ฐจ๋ก ์์ผ๋ฏ๋ก ์ฌ์์๊ฐ์ ํฉ์ 00์๊ฐ 06๋ถ 45์ด
X 2 = 00์๊ฐ 13๋ถ 30์ด
01์ 37๋ถ 44์ด
๋ถํฐ 01์ 45๋ถ 14์ด
๊น์ง : 4๋ฒ, 1๋ฒ, 5๋ฒ ์ฌ์ ๊ธฐ๋ก์ด ์ธ์ฐจ๋ก ์์ผ๋ฏ๋ก ์ฌ์์๊ฐ์ ํฉ์ 00์๊ฐ 07๋ถ 30์ด
X 3 = 00์๊ฐ 22๋ถ 30์ด
00์๊ฐ 13๋ถ 30์ด
+ 00์๊ฐ 22๋ถ 30์ด
= 00์๊ฐ 36๋ถ 00์ด
์
๋๋ค.๐๋ฌธ์
"์ฃ ๋ฅด๋"์ ๋์์ ์ฌ์์๊ฐ ๊ธธ์ด play_time, ๊ณต์ต๊ด๊ณ ์ ์ฌ์์๊ฐ ๊ธธ์ด adv_time, ์์ฒญ์๋ค์ด ํด๋น ๋์์์ ์ฌ์ํ๋ ๊ตฌ๊ฐ ์ ๋ณด logs๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ฒญ์๋ค์ ๋์ ์ฌ์์๊ฐ์ด ๊ฐ์ฅ ๋ง์ด ๋์ค๋ ๊ณณ์ ๊ณต์ต๊ด๊ณ ๋ฅผ ์ฝ์
ํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋, ๊ณต์ต๊ด๊ณ ๊ฐ ๋ค์ด๊ฐ ์์ ์๊ฐ์ ๊ตฌํด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ง์ฝ, ์์ฒญ์๋ค์ ๋์ ์ฌ์์๊ฐ์ด ๊ฐ์ฅ ๋ง์ ๊ณณ์ด ์ฌ๋ฌ ๊ณณ์ด๋ผ๋ฉด, ๊ทธ ์ค์์ ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ
์ return ํ๋๋ก ํฉ๋๋ค.
๐์ ํ์ฌํญ
play_time, adv_time์ ๊ธธ์ด 8๋ก ๊ณ ์ ๋ ๋ฌธ์์ด์ ๋๋ค.
HH:MM:SS
ํ์์ด๋ฉฐ, 00:00:01
์ด์ 99:59:59
์ดํ์
๋๋ค.00์๊ฐ 00๋ถ 01์ด
์ด์ 99์๊ฐ 59๋ถ 59์ด
์ดํ์
๋๋ค.logs๋ ํฌ๊ธฐ๊ฐ 1 ์ด์ 300,000 ์ดํ์ธ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋๋ค.
H1:M1:S1-H2:M2:S2
ํ์์
๋๋ค.H1:M1:S1
์ ๋์์์ด ์์๋ ์๊ฐ, H2:M2:S2
๋ ๋์์์ด ์ข
๋ฃ๋ ์๊ฐ์ ๋ํ๋
๋๋ค.H1:M1:S1
๋ H2:M2:S2
๋ณด๋ค 1์ด ์ด์ ์ด์ ์๊ฐ์ผ๋ก ์ฃผ์ด์ง๋๋ค.H1:M1:S1
์ H2:M2:S2
๋ play_time ์ด๋ด์ ์๊ฐ์
๋๋ค.์๊ฐ์ ๋ํ๋ด๋ HH, H1, H2
์ ๋ฒ์๋ 00~99, ๋ถ์ ๋ํ๋ด๋ MM, M1, M2
์ ๋ฒ์๋ 00~59, ์ด๋ฅผ ๋ํ๋ด๋ SS, S1, S2
์ ๋ฒ์๋ 00~59๊น์ง ์ฌ์ฉ๋ฉ๋๋ค. ์๋ชป๋ ์๊ฐ์ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค. (์: 04:60:24
, 11:12:78
, 123:12:45
๋ฑ)
return ๊ฐ์ ํ์
HH:MM:SS
ํ์์ 8์๋ฆฌ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค.๐์ ์ถ๋ ฅ ์
play_time | adv_time | logs | result |
---|---|---|---|
"02:03:55" | "00:14:15" | ["01:20:15-01:45:14", "00:40:31-01:00:00", "00:25:50-00:48:29", "01:30:59-01:53:29", "01:37:44-02:02:30"] | "01:30:59" |
"99:59:59" | "25:00:00" | ["69:59:59-89:59:59", "01:00:00-21:00:00", "79:59:59-99:59:59", "11:00:00-31:00:00"] | "01:00:00" |
"50:00:00" | "50:00:00" | ["15:36:51-38:21:49", "10:14:18-15:36:51", "38:21:49-42:51:45"] | "00:00:00" |
๐์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
01:00:00
์ ๊ณต์ต๊ด๊ณ ๋ฅผ ์ฝ์
ํ๋ฉด 26:00:00
๊น์ง ์ฌ์๋๋ฉฐ, ์ด๊ณณ์ด ๊ฐ์ฅ ์ข์ ์์น์
๋๋ค. ์ด ๊ตฌ๊ฐ์ ์์ฒญ์ ๋์ ์ฌ์์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
01:00:00-11:00:00
: ํด๋น ๊ตฌ๊ฐ์ด 1ํ(2๋ฒ ๊ธฐ๋ก) ์ฌ์๋์์ผ๋ฏ๋ก ๋์ ์ฌ์์๊ฐ์ 10์๊ฐ 00๋ถ 00์ด
์
๋๋ค.11:00:00-21:00:00
: ํด๋น ๊ตฌ๊ฐ์ด 2ํ(2๋ฒ, 4๋ฒ ๊ธฐ๋ก) ์ฌ์๋์์ผ๋ฏ๋ก ๋์ ์ฌ์์๊ฐ์ 20์๊ฐ 00๋ถ 00์ด
์
๋๋ค.21:00:00-26:00:00
: ํด๋น ๊ตฌ๊ฐ์ด 1ํ(4๋ฒ ๊ธฐ๋ก) ์ฌ์๋์์ผ๋ฏ๋ก ๋์ ์ฌ์์๊ฐ์ 05์๊ฐ 00๋ถ 00์ด
์
๋๋ค.10์๊ฐ 00๋ถ 00์ด
+ 20์๊ฐ 00๋ถ 00์ด
+ 05์๊ฐ 00๋ถ 00์ด
= 35์๊ฐ 00๋ถ 00์ด
์
๋๋ค.69:59:59-94:59:59
)์ ๊ด๊ณ ๋ฅผ ์ฝ์
ํด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ผ๋, 01:00:00
์ด 69:59:59
๋ณด๋ค ๋น ๋ฅธ ์๊ฐ์ด๋ฏ๋ก, "01:00:00"
์ return ํฉ๋๋ค.์ ์ถ๋ ฅ ์ #3
๋์์ ์ฌ์์๊ฐ๊ณผ ๊ณต์ต๊ด๊ณ ์ฌ์์๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก, ์ฝ์
ํ ์ ์๋ ์์น๋ ๋งจ ์ฒ์(00:00:00
)์ด ์ ์ผํฉ๋๋ค.
๐ค๋์ ํ์ด
function solution(play_time, adv_time, logs) {
// "HH:MM:DD" ํ์์ ์๊ฐ์ ์ด ๋จ์๋ก ๋ฐํ
function toSec(t) {
const [hour, min, sec] = t.split(":").map(a => Number(a))
return hour*3600+min*60+sec
}
// ์ด ๋จ์์ ์๊ฐ์ "HH:MM:DD" ํ์์ผ๋ก ๋ณํ
function whatTime(sec) {
let hour = Math.floor(sec/3600)
sec-=3600*hour
let min = Math.floor(sec/60)
sec-=60*min
// HH MM DD ํ ์๋ฆฌ ์๋ฉด ์์ 0
hour = String(hour).padStart(2, '0')
min = String(min).padStart(2, '0')
sec = String(sec).padStart(2, '0')
return `${hour}:${min}:${sec}`
}
// ์ ์ฒด ์๊ฐ์ ์ด๋จ์๋ก ๋ณํ
const ptToSec = toSec(play_time)
// ์ ์ฒด ์ด ๊ธธ์ด์ ๋ฐฐ์ด์ ์์ฑ (์ฌ์/์ค๋จ์ ++,--)
const wholeTimes = new Array(ptToSec).fill(0)
// ๋ก๊ทธ์ ์ ์ฒด ์๊ฐ์ ์ด ๋จ์๋ก ๋ณํ
logs.forEach(log => {
const [start, end] = log.split("-")
// ๋น๋์ค ์์/์ข
๋ฃ
const vs = toSec(start)
const ve = toSec(end)
// ์์์๊ฐ์ ++, ์ข
๋ฃ์๊ฐ์ --
wholeTimes[vs]++
wholeTimes[ve]--
})
// ์์ฒญ์ ์ ๋์ ํฉ
for(let i = 1; i <= ptToSec ; i ++) {
wholeTimes[i] += wholeTimes[i-1]
}
// ๋์ ์ฌ์ํ์ ํฉ(์๊ฐ * ์์ฒญ์ ์)
for(let i = 1; i <= ptToSec ; i ++) {
wholeTimes[i] += wholeTimes[i-1]
}
// ๊ด๊ณ ์์์ ์ด๋จ์ ์๊ฐ์ ์กฐํ
const advToSec = toSec(adv_time)
// ์ด๊ธฐ ์ต๋ค ๋์ ์ฌ์ ํ์(์์ํ์๋ง์ ๊ด๊ณ ์ฌ์) ๋ฐฐ์ด์ 0๋ถํฐ ์์ํ๋ฏ๋ก -1
let maxRun = wholeTimes[advToSec-1]
// ๊ด๊ณ ์์์๊ฐ
let startTime = 0
// ์ ์ฒด ์ฌ์ ๊ฐ๋ฅํ ๋ฐฐ์ด ์ํ
for(let i = advToSec-1 ; i < ptToSec ; i ++) {
// i - (i-advToSec)์ ํด๋น ๊ตฌ๊ฐ๋์์ ์ฌ์๋์ ๊ตฌํ๋ค. ์ฆ ์ต๋ ์ฌ์๋์ด ๋ ๊ฒฝ์ฐ
if(wholeTimes[i] - wholeTimes[i-advToSec] > maxRun) {
maxRun = wholeTimes[i] - wholeTimes[i-advToSec]
// ๊ด๊ณ ์ ์์์๊ฐ ์ ์, ์ด์ ๋ฐฐ์ด ํน์ฑ์ -1ํ 1์ด๋ฅผ ๋ณต์ํจ
startTime = i - advToSec +1
}
}
// ๋ค์ HH:MM:DD ํ์์ผ๋ก ๋ณํ
return whatTime(startTime)
}