Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฌํ–‰๊ฒฝ๋กœ

deo2kim 2020. 9. 12. 08:36
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

Lv3 | DFS

 

๊ฐ„๋‹จํ•œ DFS ๋ฌธ์ œ์ธ์ค„ ์•Œ์•˜์ง€๋งŒ ์กฐ๊ธˆ ๋ณต์žกํ•œ ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ƒฅ ํ’€๋ฉด ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 1,2๋ฒˆ์ด ํ‹€๋ฆฌ๊ฒŒ ๋œ๋‹ค.

 

์ด์œ ๋Š” ์ค‘๊ฐ„์— ๊ธธ์ด ๋Š์–ด์ง€๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ.์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋Ÿฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ - ( ์˜ˆ์™ธ ์ผ€์ด์Šค )

์œ„์™€ ๊ฐ™์ด ๋‘๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๋ฌธ์ œ์—์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ผ๊ณ  ํ–ˆ์ง€๋งŒ B๋ฅผ ๋จผ์ €๊ฐ€๊ฒŒ ๋œ๋‹ค๋ฉด ๋ชจ๋“  ํ‹ฐ์ผ“์„ ์ด์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์—ฌ๊ธฐ์„œ D๊นŒ์ง€ ๊ฐ”๋‹ค๊ฐ€ ๊ธธ์„ ๋ชป์ฐพ๊ณ  A๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์•ผ ํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋˜์ค‘

๊ธธ์ด ๋Š์–ด์ง„ D๊ฐ€ ๋งˆ์ง€๋ง‰์ด๊ฒ ๋‹ค ๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ฒฝ๋กœ๋ฅผ ๊ฑฐ๊พธ๋กœ ๋„ฃ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

๊ธธ์ด ๋Š์–ด์ ธ ์žˆ๋Š” answer์— D๋ฅผ ์ €์žฅํ•˜๊ณ , D๊ฐ€์—†์–ด์ง€๋ฉด B๋„ ๋Š์–ด์ง„๋‹ค. answer ์— B๋ฅผ ์ €์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ A๋Š” B๊ฐ€ ์—†์–ด๋„ C๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค. A -> C -> A -> B(X) -> D(X)

๋˜, ๊ฐ€๋‹ค๋ณด๋ฉด B๋Š” ์ด๋ฏธ ์—†์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ A๋ฅผ answer์— ์ €์žฅํ•˜๊ณ , ๋‚˜๋จธ์ง€ C, A ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ICN ์„ ์ €์žฅํ•˜๋ฉด

์ด๋ ‡๊ฒŒ ๋’ค์ง‘์–ด์ง„ ๊ฒฝ๋กœ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๊ณ , ์ด ๊ฒฝ๋กœ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๐Ÿ’จ defaultdict ๋Š” ๋”•์…”๋„ˆ๋ฆฌ์— ๊ฐ’์ด ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๋””ํด๋“œ๊ฐ’์œผ๋กœ ์ €์žฅํ•ด๋‘” ๊ฐ’์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

from collections import defaultdict


def solution(tickets):
    answer = []
    adj = defaultdict(list)

    for ticket in tickets:
        adj[ticket[0]].append(ticket[1])

    for key in adj.keys():
        adj[key].sort(reverse=True)

    q = ['ICN']
    while q:
        tmp = q[-1]

        if not adj[tmp]:
            answer.append(q.pop())
        else:
            q.append(adj[tmp].pop())
    answer.reverse()
    return answer

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

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

๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/43164?language=python3

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์—ฌํ–‰๊ฒฝ๋กœ

[[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO]

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์„ ๋ชจ๋‘ ์ด์šฉํ•˜์—ฌ ์—ฌํ–‰๊ฒฝ๋กœ๋ฅผ ์งœ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ICN ๊ณตํ•ญ์—์„œ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๊ณต๊ถŒ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด tickets๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณตํ•ญ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๋ชจ๋“  ๊ณตํ•ญ์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž 3๊ธ€์ž๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ๊ณตํ•ญ ์ˆ˜๋Š” 3๊ฐœ ์ด์ƒ 10,000๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • tickets์˜ ๊ฐ ํ–‰ [a, b]๋Š” a ๊ณตํ•ญ์—์„œ b ๊ณตํ•ญ์œผ๋กœ ๊ฐ€๋Š” ํ•ญ๊ณต๊ถŒ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์€ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์ผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ์•ž์„œ๋Š” ๊ฒฝ๋กœ๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋„์‹œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

ticketsreturn

[[ICN, JFK], [HND, IAD], [JFK, HND]] [ICN, JFK, HND, IAD]
[[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1

[ICN, JFK, HND, IAD] ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

[ICN, SFO, ATL, ICN, ATL, SFO] ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ [ICN, ATL, ICN, SFO, ATL, SFO] ๊ฐ€ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์•ž์„ญ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•