๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/43164
๋ฌธ์ ์ค๋ช
DFS๋ฅผ ์ด์ฉํด ๋ชจ๋ ํฐ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํฉ๋๋ค. ์ด๋ DFS์ ์์๋ฅผ ์คํ์ ์ ์ฅํ๋ค๊ฐ ์คํ top์์ ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์์ ๊ฒฝ์ฐ์ answer์ ์ถ๊ฐํฉ๋๋ค. ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋ค๋ ๊ฒ์ ๊ทธ ๊ณตํญ์ด ์ ์ผ ๋ง์ง๋ง ๋ฐฉ๋ฌธ์ง๋ผ๋ ์๋ฏธ์ ๋๋ค. ์ฆ, answer์๋ ๊ณตํญ์ ๋ฐฉ๋ฌธํ๋ ์์๊ฐ ๊ฑฐ๊พธ๋ก ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ง์ง๋ง์ answer์ ๋ค์ง์ด์ ๋ฐํํ๋ฉด ๋ฉ๋๋ค.
- ํฐ์ผ์ ์ ๋ณด(start, end)๋ฅผ ๋์ ๋๋ฆฌ routes์ ์ ์ฅ
- routes๋ start๋ฅผ key๋ก ํ๊ณ , end๋ฅผ ๋ฆฌ์คํธ์ ์์๋ก ๊ฐ๋ ๋์ ๋๋ฆฌ
- DFS์์ pop์ ์ด์ฉํด์ ์ํ๋ฒณ ์์๋๋ก ํฐ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ key์ ๋ํด value ๋ฆฌ์คํธ๋ฅผ ์ํ๋ฒณ ์ญ์์ผ๋ก ์ ๋ ฌ
- ์คํ์ ์ถ๋ฐ ์ง์ "ICN"์ ์ฝ์
- ์คํ top์ start๋ก ํ๋ ํฐ์ผ์ด ๋จ์์์ง ์์ ๊ฒฝ์ฐ top์ ์คํ์์ ๊บผ๋ด์ answer์ ์ฝ์
- ์คํ top์ start๋ก ํ๋ ํฐ์ผ์ด ๋จ์์๋ ๊ฒฝ์ฐ ํด๋น ํฐ์ผ์ routes์์ ๊บผ๋ด๊ณ end๋ฅผ ์คํ์ ์ฝ์
- ์คํ์ด ๋น ๋๊น์ง 5~6๋ฒ ๋ฐ๋ณต ์ํ
- answer์ ์ญ์์ผ๋ก ๋ฐํ
์์ค์ฝ๋
def solution(tickets):
answer = []
routes = dict() # ํฐ์ผ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋์
๋๋ฆฌ
for (start, end) in tickets:
if start in routes:
routes[start].append(end)
else:
routes[start] = [end]
# ๊ฐ ์ ์๋ ๊ณตํญ์ ์ํ๋ฒณ ์ญ์์ผ๋ก ์ ๋ ฌ
for r in routes.keys():
routes[r].sort(reverse = True)
st = ["ICN"]
while st:
top = st[-1]
# ์คํ top์ start๋ก ํ๋ ํฐ์ผ์ด ์๋ ๊ฒฝ์ฐ
if (top not in routes) or (not routes[top]):
answer.append(st.pop()) # top์ ์คํ์์ ๊บผ๋ด์ answer์ ์ ์ฅ
# ์คํ top์ start๋ก ํ๋ ํฐ์ผ์ด ์๋ ๊ฒฝ์ฐ
else:
st.append(routes[top].pop())
return answer[::-1]
728x90
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ์์ (0) | 2021.04.05 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๊ฐ์ฅ ๋จผ ๋ ธ๋ (0) | 2021.04.05 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋จ์ด ๋ณํ (0) | 2021.03.31 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋คํธ์ํฌ (0) | 2021.03.31 |
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ํ๊ฒ ๋๋ฒ (0) | 2021.03.15 |