๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/17676
๋ฌธ์ ์ค๋ช
์ด๋น ์ฒ๋ฆฌ๋์ ์์ ์๊ฐ๋ถํฐ 1์ด(=1000๋ฐ๋ฆฌ์ด)๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ๊ฐ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋น ์ฒ๋ฆฌ๋์ด ๋ฐ๋๋ ์์ ์ ์ด๋ค ์์ฒญ์ด ์์ํ๊ฑฐ๋ ๋๋๋ ์์ ์ ๋๋ค. ๋ก๊ทธ ๋ฐ์ดํฐ์ ์๋ต์๋ฃ์๊ฐ๊ณผ ์ฒ๋ฆฌ์๊ฐ์ ์ด์ฉํ์ฌ ์์ฒญ์ (์์์๊ฐ, ๋์๊ฐ)์ ๊ตฌํ ๋ค์, ํด๋น ์์ ๋ง๋ค ์ด๋น ์ฒ๋ฆฌ๋์ ๊ณ์ฐํด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค. ์ด๋, ์๊ฐ์ ๋ชจ๋ ๋ฐ๋ฆฌ์ด(msec)๋ก ๋ฐ๊ฟ์ ํ์์ต๋๋ค.
- ๊ฐ log ๋ฐ์ดํฐ์์ ์์ฒญ์ ์์์๊ฐ๊ณผ ๋์๊ฐ์ ๊ตฌํฉ๋๋ค.
1. ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ ์ง, ์๋ต์๋ฃ์๊ฐ, ์ฒ๋ฆฌ์๊ฐ์ ๊ตฌ๋ถํฉ๋๋ค.
2. ์๋ต์๋ฃ์๊ฐ์์ ':' ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์, ๋ถ, ์ด๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
3. 2์์ ๊ตฌํ ์, ๋ถ, ์ด๋ฅผ ๋ฐ๋ฆฌ์ด๋ก ๋ฐ๊ฟ์ end(๋ ์๊ฐ)์ ๊ตฌํฉ๋๋ค.
4. (end - ์ฒ๋ฆฌ์๊ฐ*1000 + 1)์ ํตํด start(์์์๊ฐ)์ ๊ตฌํฉ๋๋ค. ์ด๋ ์์์๊ฐ๊ณผ ๋์๊ฐ๋ ์ฒ๋ฆฌ์๊ฐ์ ํฌํจ๋๊ธฐ ๋๋ฌธ์ 1์ ๋ํด์ค๋๋ค. - log ๋ฆฌ์คํธ์ ๊ฐ log ๋ฐ์ดํฐ์ [start, end]๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ชจ๋ [start, end]์ ๋ํด์ ์ด๋น ์ฒ๋ฆฌ๋์ ๊ณ์ฐํ์ฌ ์ต๋๊ฐ์ ๊ตฌํฉ๋๋ค.
- ์ด๋น ์ฒ๋ฆฌ๋์ ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ฐํฉ๋๋ค.
1. start = ์ด๋น ์ฒ๋ฆฌ๋์ ๊ณ์ฐํ ์์ / end = start + 1000 (1์ด = 1000๋ฐ๋ฆฌ์ด)
2. ์ด๋ค ์์ฒญ x์ ์์์๊ฐ์ด end๋ณด๋ค ์๊ณ , ๋ ์๊ฐ์ด start๋ณด๋ค ํฌ๋ค๋ฉด ํด๋น ์์ ์ ์์ฒญ์ด ์งํ ์ค์ด๋ฏ๋ก ์ฒ๋ฆฌ๋์ 1์ ๋ํฉ๋๋ค.
3. ๊ณ์ฐํ ์ฒ๋ฆฌ๋์ ๋ฐํํฉ๋๋ค.
์์ค์ฝ๋
def solution(lines):
answer = 0
log = [] # log์ (์์์๊ฐ, ๋์๊ฐ) ์ ์ฅ
for line in lines:
date, s, t = line.split() # ๋ ์ง, ์๋ต์๋ฃ์๊ฐ, ์ฒ๋ฆฌ์๊ฐ
s = s.split(':')
t = t.replace('s', '')
end = (int(s[0])*3600 + int(s[1])*60 + float(s[2])) * 1000 # ๋์๊ฐ์ msec ๋จ์๋ก ์ ์ฅ
start = end - float(t)*1000 + 1 # ์์ ์๊ฐ์ msec ๋จ์๋ก ์ ์ฅ
log.append([start, end])
for x in log:
# ์ต๋ ์ด๋น ์ฒ๋ฆฌ๋ ๊ตฌํ๊ธฐ
answer = max(answer, throughput(log, x[0], x[0] + 1000), throughput(log, x[1], x[1] + 1000))
return answer
# ์ด๋น ์ฒ๋ฆฌ๋์ ๊ตฌํ๋ ํจ์
def throughput(log, start, end):
cnt = 0
for x in log:
if x[0] < end and x[1] >= start:
cnt += 1
return cnt
728x90