๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ "ICN" ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ชจ๋ ๊ณตํญ์ ์ํ๋ฒณ ๋๋ฌธ์ 3๊ธ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ฃผ์ด์ง ๊ณตํญ ์๋ 3๊ฐ ์ด์ 10,000๊ฐ ์ดํ์ ๋๋ค.
- tickets์ ๊ฐ ํ [a, b]๋ a ๊ณตํญ์์ b ๊ณตํญ์ผ๋ก ๊ฐ๋ ํญ๊ณต๊ถ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค.
- ์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ง์ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ return ํฉ๋๋ค.
- ๋ชจ๋ ๋์๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ๋ต
def solution(tickets):
tickets.sort(reverse=True)
graph = dict()
for t in tickets:
if t[0] not in graph:
graph[t[0]] = [t[1]]
else:
graph[t[0]].append(t[1])
stack = ["ICN"]
visited = []
while stack:
n = stack[-1]
if n not in graph or len(graph[n]) == 0:
visited.append(stack.pop())
else:
stack.append(graph[n][-1])
graph[n] = graph[n][:-1]
return visited[::-1]
tickets.sort(reverse=True)
graph = dict()
for t in tickets:
if t[0] not in graph:
graph[t[0]] = [t[1]]
else:
graph[t[0]].append(t[1])
tickets๋ฅผ ์ญ์์ผ๋ก ์ ๋ ฌํ ํ ๋์ ๋๋ฆฌ ํํ์ graph์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ key๋ก 1๋ฒ์งธ ์ธ๋ฑ์ค๋ value๋ก ์ ์ฅํ๋ค.
tickets๋ฅผ ์ญ์์ผ๋ก ์ ๋ ฌํ ํ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ value์๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๊ฒ์ด๋ค.
stack = ["ICN"]
visited = []
while stack:
n = stack[-1]
if n not in graph or len(graph[n]) == 0:
visited.append(stack.pop())
else:
stack.append(graph[n][-1])
graph[n] = graph[n][:-1]
return visited[::-1]
์ฐ์ stack์ ์ถ๋ฐ์ง์ธ ICN์ ์ ์ฅํ ํ stack์ด ๋น์ด์์ง ์์๋์ ๋ฐ๋ณตํ๋ค.
n์๋ stack์ ๋ง์ง๋ง ๊ฐ์ ์ ์ฅํด๋๊ณ
graph[n]์ด ์ ์ด์ ์๊ฑฐ๋ ๋น์ด์์ ๊ฒฝ์ฐ, ๋ง์ง๋ง ๋์ฐฉ์ง๋ผ๋ ๋ป์ด๋ฏ๋ก
visited์ stack.pop()์ธ n๊ฐ์ ์ ์ฅํ๋ค.
visited์ ๋ง์ง๋ง ๋์ฐฉ์ง๋ฅผ ์ ์ฅํ๋ ์ด์ ๋ ๋ง์ง๋ง์ visited๋ฅผ ์ญ์์ผ๋ก ์ถ๋ ฅํ๋ฏ๋ก
๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ์ญ์์ผ๋ก ์ ์ฅํด๋์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์์ผ๋ก ๊ฐ ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ, stack์ ๋ค์ ๊ฒฝ๋ก์ธ graph[n][-1]์ ์ถ๊ฐํ๊ณ
graph[n]์๋ graph[n][-1]์ ๋บ graph[n][::-1]์ ์ ์ฅํ๋ค.