ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 10451 ์ˆœ์—ด ์‚ฌ์ดํด with Python
    PS 2022. 6. 14. 00:39
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 10451 ์ˆœ์—ด ์‚ฌ์ดํด

    ๐Ÿ’ก ์กฐ๊ฑด

    1. 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ •์ˆ˜ N๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    1. ์ˆœ์—ด ๊ทธ๋ž˜ํ”„ (3, 2, 7, 8, 1, 4, 5, 6) ์—๋Š” ์ด 3๊ฐœ์˜ ์‚ฌ์ดํด์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์ดํด์„ "์ˆœ์—ด ์‚ฌ์ดํด" ์ด๋ผ๊ณ  ํ•œ๋‹ค.
    1. N๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆœ์—ด ์‚ฌ์ดํด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
    1. ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
      ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆœ์—ด์˜ ํฌ๊ธฐ N (2 โ‰ค N โ‰ค 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆœ์—ด์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ •์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค.
    1. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆœ์—ด์— ์กด์žฌํ•˜๋Š” ์ˆœ์—ด ์‚ฌ์ดํด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    1. BFS, ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

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

    from collections import deque
    from sys import stdin, setrecursionlimit
    
    setrecursionlimit(10 ** 6)
    
    
    def get_cnt(x, graph, visited):
        q = deque()
        q.append(x)
        visited.add(x)
    
        while q:
            now = q.popleft()
    
            for y in list(graph[now]):
                if y not in visited:
                    q.append(y)
                    visited.add(y)
    
        return 1
    
    
    def solve(temp):
        global ans
        res = 0
        graph = [[] for _ in range(n + 1)]
        for i in range(n):
            graph[temp[i]].append(arr[i])
    
        visited = set()
        for i in range(1, n + 1):
            if i not in visited:
                res += get_cnt(i, graph, visited)
    
        ans = max(res, ans)
    
    
    for _ in range(int(stdin.readline())):
        n = int(stdin.readline())
        arr = list(map(int, stdin.readline().split()))
        ans = 0
    
        solve([x for x in range(1, n + 1)])
        print(ans)

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

    ์˜ˆ์ œ

    2
    8
    3 2 7 8 1 4 5 6
    10
    2 1 3 4 5 6 7 9 10 8

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

    3
    7

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

    1. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜๋งŒํผ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ œ์— ์ œ์‹œ๋œ ๋ฐฉ๋ฒ•์ฒ ๋จธ ๊ทธ๋ž˜ํ”„๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์ดํด์„ ์„ธ์–ด์ฃผ๋Š” ๋ฌธ์ œ์ด๋‹ค.
    1. ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ visited ๋ณ€์ˆ˜๋ฅผ set()์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
    1. ์‚ฌ์ดํด์„ ์„ธ์–ด์ค€ ๋’ค, ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.