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
๋ฐ์ํ
๋๊ธ