<๋ฌธ์ ๋งํฌ>
https://school.programmers.co.kr/learn/courses/30/lessons/43164
<ํ์ด ์ ๋ต>
1. ๋๋ ๋ณ ์๊ฐ์์ด ๋ฐฑํธ๋ํน์ผ๋ก ํ์ด์ ํต๊ณผํ๋๋ฐ ๋ค๋ฅธ ์ฌ๋๋ค ํ์ด ๋ณด๋๊น ์ญ์์ผ๋ก dfs ํ ๋ฒ๋ง์ ํธ๋ ํ์ด๊ฐ ์์ด์ ๋ ๋ค๋ฅผ ์๊ฐํ๋ค.
2. ๋ฐฑํธ๋ํน์ ๊ทธ๋ฅ ๋ฐํ ์กฐ๊ฑด์ ์ ์ค์ ํด์ ๋ฐฑํธ๋ํน ํจ์๋ฅผ ๊ตฌํํ๋ฉด ์ด๋ ต์ง ์๋ค.
3. DFS ํ์ด๋ ์กฐ๊ธ ํน์ดํ๋ฐ ์ถ๋ฐ์ง๊ฐ 'ICN'์ผ๋ก ๊ณ ์ ๋์ด์๊ณ ๋ฐ๋์ ๋ชจ๋ ๋์๋ฅผ ์ฌํํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง๋ค๋ ์ ์ ์ด์ฉํด์ ์ถ๋ฐ์ง๋ฅผ ๊ณ ์ ํ๊ณ ๊ฒฝ๋ก๋ฅผ ๋ณต์ํ๋ ๋ฐฉ์์ด๋ค.
4. ๋ ๋ค ํต๊ณผ๋ ๊ฐ๋ฅํ์ง๋ง DFS ํ์ด๊ฐ ์กฐ๊ธ ๋ ๋ฐ์์ด ํ์ํ ๋์ ํจ์จ์ฑ ์ธก๋ฉด์์ ์ ๋ฆฌํ๋ค.
<์ ๋ต ์ฝ๋>
# 230122 ์ฌํ๊ฒฝ๋ก(๋ฐฑํธ๋ํน)
def solution(tickets):
# ๋ณ์ ์ค์ ๋ฐ ์ด๊ธฐํ
answer = []
N = len(tickets)
visited = [0 for _ in range(N)]
# ๋ฐฑํธ๋ํน ํจ์ ์ ์ธ
def backtracking(depth: int, current: str, route:list):
nonlocal N, answer
# ๋ฐํ ์กฐ๊ฑด
if depth == N:
if not answer or answer >= route:
answer = route
return
# ๋ฐฑํธ๋ํน
for i in range(N):
if not visited[i] and tickets[i][0] == current:
visited[i] = 1
backtracking(depth + 1, tickets[i][1], route + [tickets[i][1]])
visited[i] = 0
backtracking(0, 'ICN', ['ICN'])
return answer
# 230122 ์ฌํ๊ฒฝ๋ก (DFS)
from collections import defaultdict
def solution(tickets):
answer = []
ticket_dict = defaultdict(list)
for ticket in tickets:
ticket_dict[ticket[0]].append(ticket[1])
for v in ticket_dict.values():
v.sort(reverse=True)
stack = ['ICN']
while stack:
top = stack[-1]
if not ticket_dict[top]:
answer.append(stack.pop())
else:
stack.append(ticket_dict[top].pop())
answer.reverse()
return answer
'โญ Problem_Solving > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ํ๋ถ๋ฅ๋ณ ๊ฐ์ฅ ๋น์ผ ์ํ์ ์ ๋ณด ์กฐํํ๊ธฐ (SQL) (0) | 2023.04.05 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํผ์ฆ ์กฐ๊ฐ ์ฑ์ฐ๊ธฐ (Python/ํ์ด์ฌ) (0) | 2023.02.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ (Python/ํ์ด์ฌ) (0) | 2023.02.09 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋๋์ง (Python/ํ์ด์ฌ) (0) | 2023.02.08 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณ ๋์ kit - ์์ ํ์ (Python/ํ์ด์ฌ) (0) | 2023.02.07 |
๋๊ธ