[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์…”ํ‹€ ๋ฒ„์Šค / ํŒŒ์ด์ฌ / (์‹œ๋ฎฌ๋ ˆ์ด์…˜)
Problem Solving ๐Ÿ”ฅ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์…”ํ‹€ ๋ฒ„์Šค / ํŒŒ์ด์ฌ / (์‹œ๋ฎฌ๋ ˆ์ด์…˜)

https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [1์ฐจ] ์…”ํ‹€๋ฒ„์Šค

10 60 45 [23:59,23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59] 18:00

programmers.co.kr

ํ’€์ด

์€๊ทผํžˆ ๊นŒ๋‹ค๋กœ์› ๋˜ ๋ฌธ์ œ์ด๋‹ค.
ํ‘ผ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์šฐ์„ , ์‹œ๊ฐ„์„ ๋ชจ๋‘ ๋ถ„ ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•œ ํ›„
๋ชจ๋“  ํฌ๋ฃจ์›์„ ํ•œ ๋ช…์”ฉ ๋ฒ„์Šค์— ํƒœ์› ๋‹ค.
ํ•œ ๋ช…์”ฉ ๋ฒ„์Šค์— ํƒœ์šฐ๋‹ค๋ณด๋ฉด, ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์—, ๋งˆ์ง€๋ง‰ ์‚ฌ๋žŒ์ด ์–ธ์ œ ํƒ”๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ ๊ฐ’์˜ -1์„ ํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.
๋งŒ์•ฝ ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค์— ์ „๋ถ€ ํƒ€์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๋ฒ„์Šค ์‹œ๊ฐ„์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

def solution(n, t, m, timetable):
    answer = ''
    crew = [ int(tt.split(":")[0])*60+int(tt.split(":")[1]) for tt in timetable ]
    # ํฌ๋ฃจ์˜ ๋„์ฐฉ์‹œ๊ฐ„
    crew.sort()

    # bus[x] = (๋ฒ„์Šค์‹œ๊ฐ„, ์Šน๊ฐ ์ˆ˜, ๋งˆ์ง€๋ง‰ ํƒ„ ํฌ๋ฃจ์˜ ๋„์ฐฉ์‹œ๊ฐ„)
    bus = [ (540+t*i, 0, None) for i in range(n)]

    bidx, cidx = 0, 0
    while cidx < len(crew):
        c = crew[cidx]
        if bidx == len(bus):
            break
        if c <= bus[bidx][0] and bus[bidx][1] < m:
            tt, cnt, _ = bus[bidx]
            bus[bidx] = (tt, cnt+1, c)
            cidx += 1
        else:
            bidx += 1

    ret = bus[-1][0]
    if bus[-1][2]:
        if bus[-1][1] == m:
            ret = bus[-1][2] - 1

    return '%02d:%02d' % (ret // 60, ret % 60)