๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 9. 14.
728x90
๋ฐ˜์‘ํ˜•
https://school.programmers.co.kr/learn/courses/30/lessons/176962
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

def solution(plans):
    plans = [[n, int(s.split(':')[0])*60 + int(s.split(':')[1]),int(p)] for n, s, p in plans]
    plans = sorted(plans, key=lambda x:-x[1])
    stack, answer = [plans.pop()], []
    time = stack[-1][1]
    
    while plans:
        if stack:
            stack[-1][2] -= 1
            if stack[-1][2] == 0:
                answer.append(stack.pop()[0])
                
        if plans[-1][1] == time:
            stack.append(plans.pop())
            
        time += 1
    
    while stack:
        answer.append(stack.pop()[0])
                   
    return answer

"""
00:00 ~ 23:59๊นŒ์ง€์˜ ์‹œ๊ฐ„๋งŒ ์žˆ๋Š”๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ 
while๋ฌธ์ด 1440๋ฒˆ ์ •๋„ ๋Œ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์‹œ๊ฐ„์ˆœ์œผ๋กœ while๋ฌธ์„ ๋Œ๋ ธ๋‹ค.

๋จผ์ € plans์˜ ํ˜•ํƒœ๊ฐ€ ["korean", "11:40", "30"] ๋กœ ๋˜์–ด ์žˆ์œผ๋‹ˆ,
์‹œ๊ฐ„์„ hh*60 + mm ์œผ๋กœ ๋ฐ”๊พธ๊ณ , string์„ int๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค.

๊ทธ๋‹ค์Œ ์‹œ๊ฐ„์ˆœ์„œ์— ๋งž์ถฐ์„œ sortํ•ด์ฃผ๊ณ , stack์— ์ฒซ์ผ์ •์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
์ดˆ๊ธฐ ์‹œ๊ฐ„๋„ ์ฒซ์ผ์ •์˜ ์‹œ๊ฐ„์œผ๋กœ ๋งž์ถ”์—ˆ๋‹ค.

while๋ฌธ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ stack์—์„œ ์‹œ๊ฐ„์„ 1 ๊ฐ์†Œ์‹œ์ผœ์ค€๋‹ค.
์—ฌ๊ธฐ์„œ while๋ฌธ์€ 1์ดˆ์— ํ•œ๋ฒˆ์”ฉ ๋Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
["korean", "11:40", 30] -> ["korean", 700, 30]์œผ๋กœ ๋ฐ”๋€Œ๊ณ 
์ด๊ฒŒ stack์— ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด [korean, 700, 29]๋กœ ๋ฐ”๋€๋‹ค.
0์ด ๋œ๋‹ค๋ฉด ๊ทธ ์ผ์ •์„ ๋‹คํ•œ๊ฒƒ์ด๋ฏ€๋กœ answer์— ์ด๋ฆ„๋งŒ ๋„ฃ๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  plans์—์„œ ๊ฐ€์žฅ๋น ๋ฅธ ์ผ์ •์ด time๊ณผ ๊ฐ™๋‹ค๋ฉด stack์— ๋„ฃ์–ด์ค€๋‹ค.
์ด๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  plans๊ฐ€ ๋นˆ ๋ฐฐ์—ด์ด ๋œ๋‹ค๋ฉด ์ด์ œ ๋‚จ์€ ์ผ์ •๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์—
stack์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์–ด answer์— ๋„ฃ์–ด์ค€๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€