ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1939 ์ค‘๋Ÿ‰์ œํ•œ with Python
    PS 2022. 7. 12. 15:12
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1939 ์ค‘๋Ÿ‰์ œํ•œ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. N(2 โ‰ค N โ‰ค 10,000)๊ฐœ์˜ ์„ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‚˜๋ผ๊ฐ€ ์žˆ๋‹ค. ์ด๋“ค ์ค‘ ๋ช‡ ๊ฐœ์˜ ์„ฌ ์‚ฌ์ด์—๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์„œ ์ฐจ๋“ค์ด ๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค.
    1. ์˜์‹ ์ค‘๊ณต์—…์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ์„ฌ์— ๊ณต์žฅ์„ ์„ธ์›Œ ๋‘๊ณ  ๋ฌผํ’ˆ์„ ์ƒ์‚ฐํ•˜๋Š” ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค.
      ๋ฌผํ’ˆ์„ ์ƒ์‚ฐํ•˜๋‹ค ๋ณด๋ฉด ๊ณต์žฅ์—์„œ ๋‹ค๋ฅธ ๊ณต์žฅ์œผ๋กœ ์ƒ์‚ฐ ์ค‘์ด๋˜ ๋ฌผํ’ˆ์„ ์ˆ˜์†กํ•ด์•ผ ํ•  ์ผ์ด ์ƒ๊ธฐ๊ณค ํ•œ๋‹ค.
      ๊ทธ๋Ÿฐ๋ฐ ๊ฐ๊ฐ์˜ ๋‹ค๋ฆฌ๋งˆ๋‹ค ์ค‘๋Ÿ‰์ œํ•œ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ„ฑ๋Œ€๊ณ  ๋ฌผํ’ˆ์„ ์˜ฎ๊ธธ ์ˆœ ์—†๋‹ค.
      ๋งŒ์•ฝ ์ค‘๋Ÿ‰์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋Š” ์–‘์˜ ๋ฌผํ’ˆ์ด ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฆฌ๊ฐ€ ๋ฌด๋„ˆ์ง€๊ฒŒ ๋œ๋‹ค.
    1. ์ฒซ์งธ ์ค„์— N, M(1 โ‰ค M โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.
      ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋‹ค๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ์ •์ˆ˜ A, B(1 โ‰ค A, B โ‰ค N), C(1 โ‰ค C โ‰ค 1,000,000,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    1. ์ด๋Š” A๋ฒˆ ์„ฌ๊ณผ B๋ฒˆ ์„ฌ ์‚ฌ์ด์— ์ค‘๋Ÿ‰์ œํ•œ์ด C์ธ ๋‹ค๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
      ์„œ๋กœ ๊ฐ™์€ ๋‘ ์„ฌ ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ๋‹ค๋ฆฌ๋Š” ์–‘๋ฐฉํ–ฅ์ด๋‹ค.
    1. ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ๊ณต์žฅ์ด ์œ„์น˜ํ•ด ์žˆ๋Š” ์„ฌ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
      ๊ณต์žฅ์ด ์žˆ๋Š” ๋‘ ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ํ•ญ์ƒ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.
    1. BFS, ์ด๋ถ„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    from collections import deque
    
    n, m = map(int, stdin.readline().split())
    graph = [[] for _ in range(n + 1)]
    
    for _ in range(m):
        a, b, c = map(int, stdin.readline().split())
        graph[a].append((b, c))
        graph[b].append((a, c))
    
    start, end = map(int, stdin.readline().split())
    l, r = 0, int(1e9)
    
    
    def solve(mid):
        q = deque()
        q.append(start)
        visited[start] = True
    
        while q:
            now = q.popleft()
            if now == end:
                return True
    
            for node, cost in graph[now]:
                if not visited[node] and mid <= cost:
                    q.append(node)
                    visited[node] = True
    
        return False
    
    
    ans = 0
    while l <= r:
        mid = (l + r) // 2
        visited = [False for _ in range(n + 1)]
    
        if solve(mid):
            ans = max(ans, mid)
            l = mid + 1
    
        else:
            r = mid - 1
    
    print(ans)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    3 3
    1 2 2
    3 1 3
    2 3 2
    1 3

    ์‹คํ–‰๊ฒฐ๊ณผ

    3

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ์ง€๋ฌธ์„ ํ†ตํ•ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์–‘๋ฐฉํ–ฅ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
      ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด graph ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์„ฌ๊ณผ ์„ฌ ๋ฒˆํ˜ธ, ๊ฐ„์„ ์˜ ๋น„์šฉ์ธ (a,b,c) ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    1. ์ถœ๋ฐœ์ง€์ ๊ณผ ๋„์ฐฉ์ง€์ ์„ ์ž…๋ ฅ๋ฐ›์•„ start, end์— ์ €์žฅํ•œ ํ›„ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ์œ„ํ•œ BFSํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
      ์ด ๋•Œ, ๋“ค๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ค‘๋Ÿ‰ ๊ฐ’ mid ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•˜์—ฌ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋ฐ ํ์— ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
      ์กฐ๊ฑด์€ ๋‘๊ฐ€์ง€๋‹ค. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ, mid ๋ณด๋‹ค cost๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ์ด๋‹ค.
    1. ์ตœ๋Œ€ ์ค‘๋Ÿ‰๊ฐ’์„ 1๋ถ€ํ„ฐ 1,000,000,000 ๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœํšŒ๋ฅผ ๋Œ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์ด๋ถ„ํƒ์ƒ‰์„ ํ†ตํ•ด์„œ mid ๊ฐ’์„ ์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
    1. BFS์—์„œ True ๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค๋ฉด, ans๊ฐ€ mid ๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ๊ฐฑ์‹ ํ•œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.