ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 2458 ํ‚ค ์ˆœ์„œ with Python (Feat. PyPy3)
    PS 2021. 9. 2. 22:44
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 2458 ํ‚ค ์ˆœ์„œ

    ๐Ÿ’ก ์กฐ๊ฑด ๋ฐ ํ’€์ด

    1. 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์—ฌ์ ธ ์žˆ๋Š” ํ•™์ƒ๋“ค๋ผ๋ฆฌ ๋‘ ๋ช…์”ฉ ํ‚ค๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.
    2. N๋ช…์˜ ํ•™์ƒ๋“ค์€ ๋ชจ๋‘ ํ‚ค๊ฐ€ ๋‹ค๋ฅด๋‹ค.
    3. ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ด๋‹ค.
    4. 2 <= N <= 500, 0 <= M <= N(N-1)/2
    5. M๊ฐœ์˜ ์ค„์— ๋‘ ํ•™์ƒ์˜ ํ‚ค๋ฅผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์–‘์˜ ์ •์ˆ˜ a, b๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    6. a, b == a๊ฐ€ b๋ณด๋‹ค ์ž‘๋‹ค
    7. ์ž์‹ ์˜ ํ‚ค๊ฐ€ ๋ช‡๋ฒˆ์งธ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

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

    from sys import stdin
    
    n, m = map(int, stdin.readline().split())
    inf = int(1e9)
    graph = [[inf] * (n + 1) for _ in range(n + 1)]
    
    for _ in range(m):
        a, b = map(int, stdin.readline().split())
        graph[b][a] = 1
    
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            for k in range(1, n + 1):
                if j == k:
                    graph[j][k] = 0
                    continue
                if graph[j][k] > graph[j][i] + graph[i][k]:
                    graph[j][k] = graph[j][i] + graph[i][k]
    
    
    res = n
    for i in range(1, n + 1):
        checker = 1
        for j in range(1, n + 1):
            if graph[i][j] == inf and graph[j][i] == inf:
                res -= 1
                checker = 0
            if not checker:
                break
    
    print(res)

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

    ์˜ˆ์ œ

    6 7
    1 3
    1 5
    3 4
    5 4
    4 2
    4 6
    5 2

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

    2

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

    1. ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ์ •ํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ 
      INF ๊ฐ’์„ ๋„ฃ์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.
    2. a, b ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๊ฒŒ ๋˜๋ฉด a ๊ฐ€ b ๋ณด๋‹ค ์ž‘๋‹ค ๋ผ๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ, 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์— graph[b].append(a)
    3. ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
    4. ์ž์‹ ์˜ ํ‚ค๊ฐ€ ๋ช‡๋“ฑ์ธ์ง€ ์•Œ ์ˆ˜์žˆ๋Š” ์‚ฌ๋žŒ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ N๋ช…์ด๋ผ๊ณ  ์ •์˜ํ•œ ๋’ค 1๋ฒˆ ํ•™์ƒ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ
      2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ๋กœ ๋งŒ๋“  2์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ์ ‘๊ทผ
    5. if graph[i][j] == inf and graph[j][i] == inf:
      i๋ฒˆ ํ•™์ƒ์ด j๋ฒˆ ํ•™์ƒ๊ณผ์˜ ์ž‘๋‹ค, ํฌ๋‹ค์˜ ์ •๋ณด๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด res -= 1
    6. 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๊ธฐ ์œ„ํ•œ checker๋ณ€์ˆ˜์— 0์„ ๋„ฃ์–ด์ฃผ๊ณ (False) ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ
    7. PyPy3 ์ œ์ถœ

    ๐Ÿ’พ ๋Š๋‚€์ 

    • ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ๋‹ˆ์˜จ-ํŒŒ์ธ๋“œ๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค.
      ์œ ๋‹ˆ์˜จ-ํŒŒ์ธ๋“œ๋กœ ๊ตฌํ˜„์„ ํ•˜๋ ค๋‹ค๋ณด๋‹ˆ ์ ˆ๋Œ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์•„ ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.
    • ์•„๋Š” ๋ถ„๋“ค์˜ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด๋ณด๋‹ˆ BFS๋กœ ๊ตฌํ˜„ํ•˜์…จ๋‹ค๊ณ  ํ–ˆ๋‹ค.
    • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์„ ๋•Œ, Python3 ๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ์ƒ๊ฒผ์œผ๋ฉฐ, PyPy3 ๋Š” ํ†ต๊ณผ
    • BFS๋กœ ํ’€์ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ตฌํ˜„ํ•ด๋ด์•ผ๊ฒ ๋‹ค.
    • ๋ฌธ์ œ๋ฅผ ํ’€์‹œ๊ฐ„์€ ์—†๋Š”๋ฐ ์ƒ๊ฐํ•  ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ๋‹ค. ์•„์ง ์ˆ™๋‹ฌ์ด ๋˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.