[TIL_Carrotww] 41 - 22/10/31

μœ ν˜•μ„Β·2022λ…„ 11μ›” 1일
0

TIL

λͺ©λ‘ 보기
50/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 python Algorithm

πŸ” programmers μ—¬ν–‰κ²½λ‘œ dfs level3
첫 번째 풀이가 μ•ˆλλ˜ μ΄μœ κ°€ μž¬κ·€λ₯Ό 톡해 λ‹€λ₯Έ λ‹¨μ–΄λ‘œ λ‹€μ‹œ λ“€μ–΄κ°€μ•Ό ν•˜λŠ”λ° 첫 번째 경둜둜만 λ“€μ–΄κ°€ λ‹€μ‹œ λ‚˜μ˜€μ§€ λͺ»ν–ˆλ‹€.

  • 1번째 풀이
from collections import defaultdict

def solution(tickets):
    visited, path, stack = [], ["ICN"], ["ICN"]
    tic = defaultdict(list)
    for a, b in tickets:
        tic[a].append(b)
    for t in tic.values():
        t.sort()

    def dfs(visited, path, stack):
        # if not stack:
        #     return path
        start = stack.pop()
        if start in tic:
            for i in tic[start]:
                if (start, i) not in visited:
                    visited.append((start, i))
                    stack.append(i)
                    path.append(i)
                    dfs(visited, path, stack)
                    print(visited)

    dfs(visited, path, stack)

    return path

μœ„ ν’€μ΄λ‘œλŠ” ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 절반만 톡과... λ‹€λ₯Έ 경둜둜 λ“€μ–΄κ°€μ„œ λ‚˜μ™”λ‹€κ°€ 2 번째 경둜둜 λ“€μ–΄κ°€μ•Όν•˜λŠ”λ° κ·Έ κ±Έ 처리λ₯Ό λͺ» 해쀬닀.

  • μ •λ‹΅ 풀이
from collections import defaultdict

def solution(tickets):
    tic = defaultdict(list)
    result = []

    for key, val in tickets:
        tic[key].append(val)
    for i in tic.values():
        i.sort(reverse=True)

    def dfs(city):
        while tic[city]:
            dfs(tic[city].pop())
        if not tic[city]:
            result.append(city)
            return

    dfs("ICN")

    return result

🧲 μž‘λ‹΄

πŸ” dfsλŠ” μŠ€νƒμœΌλ‘œ ν’€ 수 있고, μž¬κ·€λ‘œ ν’€ 수 μžˆλŠ”λ° μ§€κΈˆ λ‚œ μž¬κ·€λ‘œ ν’€μ—ˆλ‹€.
ν‰μ†Œ μŠ€νƒμœΌλ‘œ ν‘ΈλŠ”κ²ƒλ§Œ μ΅μˆ™ν•΄μ Έμžˆμ–΄ μž¬κ·€λ‘œ ν’€μ–΄λ³΄μ•˜λ‹€.
μ˜€λŠ˜μ€ κ°•μ˜λ₯Ό λ“£λŠλΌ μ‹œκ°„μ΄ λŠ¦μ–΄ 많이 μƒκ°μ„ν•˜κ³  풀어보지 λͺ»ν–ˆλ‹€.
내일 문제 ν•˜λ‚˜ 더 ν’€λ©° μ§€κΈˆ λ¬Έμ œλ„ λ‹€λ₯Έ λ°©ν–₯으둜 λͺ‡ 번 더 풀어보아야겠닀.

profile
Carrot_hyeong

0개의 λŒ“κΈ€