๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

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

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

 

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

 

from collections import defaultdict

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

    for ticket in tickets :
        route[ticket[0]].append(ticket[1])
    
    for key in route.keys():
        route[key].sort(reverse=True)

    stack = ["ICN"]
    while stack:
        tmp = stack[-1]
        if route[tmp] == []:
            answer.append(stack.pop())
        else:
            stack.append(route[tmp].pop())
    answer.reverse()
    return answer

 

๋ฌธ์ œ ํ•ต์‹ฌ

๋ฒ„๋ฒ…๊ฑฐ๋ฆฐ ์ด์œ 

1) ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ๋ฌด์ง€: ๋‚ด์šฉ๋ณด๋‹จ, ์–ธ์–ด ์ž์ฒด๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.

2) ๋ฌธ์ œ์—์„œ ์ •์˜ํ•œ ์œ ๋‹ˆ๋ฒ„์Šค๋ฅผ ์ œ๋Œ€๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. 

์กฐ๊ฑด์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜€์ง€๋งŒ, ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ์กฐ๊ฑด์€ ์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ ๋ชจ๋‘ ์ด์šฉ ์ด๋‹ค.

์ด๋Š” ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ธ‰๊ฒฉํžˆ ์ค„์—ฌ์ค€๋‹ค.

 

๋ชจ๋“  ํ‹ฐ์ผ“์„ ๋‹ค ์“ด๋‹ค๋Š” ๋ง์€

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋‚˜์˜จ๋‹ค๋ฉด,  ์ฃผ์–ด์ง„ ํ•ญ๊ณต๊ถŒ์„ ๋ชจ๋‘ ์ด์šฉํ•˜์—ฌ ๋ฆด๋ ˆ์ด ์—ฌํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹จ ๋ง์ด๋‹ค.

์ฆ‰, ๋„์ฐฉ์ง€๋Š” ๋‹ค์Œ์˜ ์ถœ๋ฐœ์ง€๊ฐ€ ๋˜๊ณ ,  ์ฒ˜์Œ ๋…ธ๋“œ๋กœ๋งŒ์œผ๋กœ๋„ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง๊ณผ ๊ฐ™๋‹ค.

 

์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ์จ A to B ํ•ญ๊ณต๊ถŒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Dictionary ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”๋†จ์„ ๋•Œ

 

ICN : ["B"]

B: ["C"]

C: ["E", "ICN"]

D: ["C"]

E: ["D"]

 

 

ICN(ํŒ7) → B(ํŒ6) → C(ํŒ5) → ICN'(ํŒ1)                           

                                                         → E(ํŒ4) → D(ํŒ3) → C(ํŒ2)

 

REVERSEํ•˜๊ธฐ ์ „:  ICN' → C → D → E → C → B → ICN

์ •๋‹ต: ICN → B → C → E → D → C → ICN'

 

๋…ผ๋ฆฌ: ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ์—ฐ๊ฒฐ๋˜์–ด ํ˜•ํƒœ๋ฅผ ๊ฐ€์ ธ์•ผ๋งŒ ํ•˜๋ฏ€๋กœ, ๋”์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๋Š” ๋…ธ๋“œ๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฌธ์ง€๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ

์ด๋ฅผ n-1 ์‹œํ‚ค๋ฉด n์€ ๊ฒฐ๊ตญ ์ถœ๋ฐœ์ง€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•