๏นฅ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level 2. ๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ (Python3)

@๋‚จ์ œ์ด ยท 2024๋…„ 08์›” 29์ผ ยท 3๋ถ„
problem_solvingprogrammersํ”„๋กœ๊ทธ๋ž˜๋จธ์Šคpythonlevel 2๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ

๋ฌธ์ œ ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/176962


๋ฌธ์ œ ์š”์•ฝ

๊ณผ์ œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„ํš์„ ์„ธ์› ๋‹ค. plans ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์ง€๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋กœ ๊ณผ์ œ ์ด๋ฆ„(name), ์‹œ์ž‘ ์‹œ๊ฐ„(start), ๊ณผ์ œ๋ฅผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(playtime) ์„ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณ„ํš์— ์ฃผ์–ด์ง„ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋ฌธ์ œ์—์„œ ๊ณผ์ œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค.

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

๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋ฉด ์‹œ๊ฐ„์ด ๋˜๋ฉด ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ํ•˜๊ณ  ์žˆ๋Š” ๊ณผ์ œ๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋‹ค๋ฅธ ๊ณผ์ œ๋ฅผ ํ•ด์•ผํ•˜๋ฉด ํ•˜๋˜ ๊ณผ์ œ๋ฅผ ๋ฉˆ์ถ”๊ณ  ๋‹ค์Œ ๊ณผ์ œ๋ฅผ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰ ๊ณผ์ œ๋ฅผ ๋งˆ์น˜๊ณ  ๋‚˜์„œ ํ•˜์ง€ ๋ชปํ•œ ๊ณผ์ œ ์ค‘์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฉˆ์ถ˜ ๊ณผ์ œ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•œ๋‹ค.


๋ฌธ์ œ ํ’€์ด

๋จผ์ € ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ๊ณผ์ œ๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ plans ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š์•„ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ์„ ๋จผ์ € ํ•ด์ฃผ์—ˆ๋‹ค.

plans.sort(key=lambda x: x[1])

๋‹ค์Œ ์ง„ํ–‰์ค‘์ธ ๊ณผ์ œ๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ์™€ ํ˜„์žฌ ์‹œ๊ฐ„ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

running = []  # ์ง„ํ–‰ ์ค‘์ธ ์ผ์ •๋“ค์„ ์ €์žฅํ•  ์Šคํƒ
current_time = 0  # ํ˜„์žฌ ์‹œ๊ฐ„

๊ทธ๋ฆฌ๊ณ  ๊ณ„ํš์— ์žˆ๋Š” ๊ณผ์ œ๋“ค์„ ๊ฐ€์ ธ์™€์„œ ์‹œ๊ฐ์„ ๋ถ„์œผ๋กœ ๋ฐ”๊ฟ”์ค€ ์ด์œ ๋Š” ์ฝœ๋ก (:) ์œผ๋กœ ์‹œ์™€ ๋ถ„์ด ๊ตฌ๋ถ„๋˜์–ด์žˆ์–ด ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค๊ณ  ํŒ๋‹จ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„ ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

for plan in plans:
    name, start, playtime = plan
    
    # ์‹œ๊ฐ„์„ ๋ถ„์œผ๋กœ ๋ณ€ํ™˜
    start = int(start[:2]) * 60 + int(start[3:])  
    playtime = int(playtime)

๊ณผ์ œํ•  ์‹œ๊ฐ„์ด ๋˜๋ฉด ๊ณผ์ œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ง„ํ–‰ํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ฒ˜์Œ์—๋Š” ์ง„ํ–‰์ค‘์ธ ๊ณผ์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์— ๊ณผ์ œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์‹œ๊ฐ„์€ ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์ด ๋œ๋‹ค.

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

# ์Šคํƒ์— ๋‚จ์€ ์ผ์ •์˜ ๋‚จ์€ ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธ
if running:
    running[-1][1] -= (start - current_time)

# ์ƒˆ๋กœ์šด ์ผ์ • ์Šคํƒ์— ์ถ”๊ฐ€
running.append([name, playtime])
current_time = start

๋งŒ์•ฝ, ์ง„ํ–‰ ์ค‘์ธ ๊ณผ์ œ๊ฐ€ ๋‹ค์Œ ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋์ด ๋‚œ๋‹ค๋ฉด ๊ณผ์ œ๋ฅผ ๋๋‚ด๊ณ  ๊ณผ์ œ ์ด๋ฆ„์„ ๊ฒฐ๊ณผ์— ๋„ฃ์–ด์ค€๋‹ค.

# ์Šคํƒ์— ์žˆ๋Š” ์ผ์ • ์ฒ˜๋ฆฌ
while running and current_time + running[-1][1] <= start:
    last_name, last_playtime = running.pop()
    current_time += last_playtime
    answer.append(last_name)

๊ณ„์†ํ•ด์„œ ๊ณผ์ œ๋ฅผ ๋๋‚ด๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ํ˜„์žฌ ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ  ๊ณผ์ œ๋ฅผ ๋ฉˆ์ถ”์—ˆ๋‹ค๋ฉด ์ง€๋‚˜๊ฐ„ ์‹œ๊ฐ„์„ ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์•ž์„œ ์ฝ”๋“œ๋ฅผ ์ชผ๊ฐœ๊ฐ€๋ฉด์„œ ์„ค๋ฉํ•ด๋ณด์•˜๋Š”๋ฐ ์„ค๋ช…์œผ๋กœ๋งŒ ๋ณธ๋‹ค๋ฉด ์ •๋ง ์‰ฝ๊ฒŒ ๋Š๊ปด์ง€์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋งŽ์ด ๊ณ ๋ฏผํ•˜๊ณ  ์ž‘์„ฑํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์กฐ๊ธˆ ๋” ์ดํ•ดํ•˜๊ธฐ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ทธ๋ ค๋ณด์•˜๋‹ค.
๊ทธ๋ฆผ์—์„œ ์‚ฌ์šฉํ•œ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

plans = [
    ["science", "12:40", "50"], 
    ["music", "12:20", "40"], 
    ["history", "14:00", "30"], 
    ["computer", "12:30", "100"]
]	

result = ["science", "history", "computer", "music"]

๋จผ์ € ์‹œ๊ฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ๋‚˜์„œ ๋ถ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

image

์ด์ œ ํ•˜๋‚˜์”ฉ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ ค๋ณด์ž.

์ฒซ ๊ณผ์ œ์ธ music ์„ ์‹œ์ž‘ํ•  ๋•Œ์—๋Š” ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ๊ณผ์ œ๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง„ํ–‰์ค‘์ธ ๋ฆฌ์ŠคํŠธ์— ๊ณผ์ œ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ณผ์ œ๊ฐ€ ์‹œ์ž‘ํ•œ ๋‚ ์งœ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

image2


๋‹ค์Œ ๊ณผ์ œ์ธ computer ๋ฅผ ์‹œ์ž‘ํ•ด์•ผํ•˜๋Š”๋ฐ ์•„์ง music ๊ณผ์ œ๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— music ๊ณผ์ œ๋ฅผ ๋ฉˆ์ถ”๊ณ  computer ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  10๋ถ„๋™์•ˆ music ๊ณผ์ œ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚จ์€ ์‹œ๊ฐ„์—์„œ 10๋ถ„์„ ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

image3

๋‹ค์Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ computer ๊ณผ์ œ๋ฅผ ๋๋‚ด๊ธฐ ์ „์— science ๊ณผ์ œ๋ฅผ ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— computer ๊ณผ์ œ๋ฅผ ๋ฉˆ์ถ”๊ณ  science ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋•Œ์—๋„ 10๋ถ„๋™์•ˆ computer ๊ณผ์ œ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚จ์€ ์‹œ๊ฐ„์—์„œ 10๋ถ„์„ ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

image4

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๊ณผ์ œ์ธ hisotry ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— science ๊ณผ์ œ๊ฐ€ ๋จผ์ € ๋๋‚˜๊ฒŒ ๋œ๋‹ค.
์ด๋•Œ ํ˜„์žฌ ์‹œ๊ฐ„์€ science ๊ณผ์ œ๊ฐ€ ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ๋˜๊ณ  ์ด์ „์— ๋ฉˆ์ถ˜ computer ๊ณผ์ œ๋ฅผ ๋งˆ์ € ์ง„ํ–‰ํ•œ๋‹ค.

image5

๊ทธ๋Ÿผ ๊ณผ์ œ๊ฐ€ ๋๋‚œ ๊ฒฐ๊ณผ์— ์ถ”๊ฐ€๋ฅผ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

science ๊ณผ์ œ๋ฅผ ๋๋‚ด๊ณ  ๊ทธ ์ „์— ๋ฉˆ์ถ”์—ˆ๋˜ computer ๊ณผ์ œ๋ฅผ ํ•˜๋Š”๋ฐ ๋๋‚ด๊ธฐ ์ „์— history ๊ณผ์ œ๋ฅผ ๋จผ์ € ์‹œ์ž‘ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— history ๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
์ด๋•Œ์—๋„ 30๋ถ„๋™์•ˆ computer ๊ณผ์ œ๋ฅผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚จ์€ ์‹œ๊ฐ„์—์„œ 30๋ถ„์„ ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

image6

์ด์ œ ๋” ์ด์ƒ ๋‚จ์•„์žˆ๋Š” ๊ณผ์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฉˆ์ถ”์—ˆ๋˜ ๊ณผ์ œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋๋‚ด์ฃผ๋ฉด ๋œ๋‹ค.

image7


์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ณผ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฑฐ์˜ 3์ฃผ? ๋งŒ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋“ค์—ฌ๋‹ค๋ณธ ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์กฐ๊ธˆ๋งŒ ๋” ์ง‘์ค‘ํ•ด์„œ ์ƒ๊ฐํ•ด๋ดค๋‹ค๋ฉด ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ์ถฉ๋ถ„ํžˆ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ์˜ค๋žœ๋งŒ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋‹ˆ ๊ฐ์„ ๋งŽ์ด ์žƒ์€ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. ์–ด๋–ป๊ฒŒ ์ˆœ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค„ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ์™€ ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ๊ณ  ๋น„๊ต๋ฅผ ํ•ด์ค„์ง€ ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ์ข‹์„์ง€์— ๋Œ€ํ•ด์„œ ๋งŽ์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™•์‹คํžˆ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๊ธดํ•˜์ง€๋งŒ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๋•Œ์—๋„ ๊ทธ๋ฆผ์„ ๋งค๋ฒˆ ๊ทธ๋ ค๊ฐ€๋ฉฐ ํ’€ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•˜๋Š” ์—ฐ์Šต์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

์•„์ง์€ ๊ธด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๊ผˆ๊ณ  ์‹œ๊ฐ„์ด ๋‚  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๊พธ์ค€ํžˆ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.


์ œ์ถœ ๋‹ต์•ˆ

def solution(plans):
    answer = []
    # ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ: ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
    plans.sort(key=lambda x: x[1])
    
    running = []  # ์ง„ํ–‰ ์ค‘์ธ ์ผ์ •๋“ค์„ ์ €์žฅํ•  ์Šคํƒ
    current_time = 0  # ํ˜„์žฌ ์‹œ๊ฐ„
    
    for plan in plans:
        name, start, playtime = plan
        
        # ์‹œ๊ฐ„์„ ๋ถ„์œผ๋กœ ๋ณ€ํ™˜
        start = int(start[:2]) * 60 + int(start[3:])  
        playtime = int(playtime)
        
        # ์Šคํƒ์— ์žˆ๋Š” ์ผ์ • ์ฒ˜๋ฆฌ
        while running and current_time + running[-1][1] <= start:
            last_name, last_playtime = running.pop()
            current_time += last_playtime
            answer.append(last_name)
        
        # ์Šคํƒ์— ๋‚จ์€ ์ผ์ •์˜ ๋‚จ์€ ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธ
        if running:
            running[-1][1] -= (start - current_time)
        
        # ์ƒˆ๋กœ์šด ์ผ์ • ์Šคํƒ์— ์ถ”๊ฐ€
        running.append([name, playtime])
        current_time = start
    
    # ์Šคํƒ์— ๋‚จ์€ ์ผ์ • ์ฒ˜๋ฆฌ
    while running:
        answer.append(running.pop()[0])
    
    return answer