Algorithm Problem/Python

[python] SWEA - 1248. ๊ณตํ†ต์กฐ์ƒ

deo2kim 2020. 9. 17. 20:55
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

D5 | ๊ทธ๋ž˜ํ”„

 

์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ž.

์ด๋Ÿฐ์‹์œผ๋กœ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค. ๊ธธ์ด๊ฐ€ 3์ธ ๋ฆฌ์ŠคํŠธ๊ฐ€ V๊ฐœ์ธ 2์ฐจ์›๋ฆฌ์ŠคํŠธ

 

๋ถ€๋ชจ ๋…ธ๋“œ๋“ค ์ฐพ๊ธฐ์ฒซ ๋…ธ๋“œ (์—ฌ๊ธฐ์„œ๋Š” 8 ๊ณผ 13) ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํƒ€๊ณ  ์ญ‰ ์˜ฌ๋ผ๊ฐ„๋‹ค. ( DFS )

  • 8 ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” [5, 3, 1]
  • 13์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” [11, 6, 3, 1]

๊ณตํ†ต ๋ถ€๋ชจ ๋…ธ๋“œ ์ฐพ๊ธฐ

์•ž์—์„œ๋ถ€ํ„ฐ for๋ฌธ์„ ๋Œ๋ฉฐ ๊ฒน์น˜๋Š” ์นœ๊ตฌ ์ฐพ๊ณ  ๋ฐ”๋กœ ๋‚˜์˜ค๊ธฐ (์—ฌ๊ธฐ์„œ๋Š” 3)

 

๊ณตํ†ต ๋ถ€๋ชจ ๋…ธ๋“œ ํฌ๊ธฐ ์ฐพ๊ธฐ

๋…ธ๋“œ(์—ฌ๊ธฐ์„œ๋Š” 3)์—์„œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ํƒ€๊ณ  ์ญ‰ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ค€๋‹ค(DFS)

 

๐Ÿ’จ

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def find_parent(n, parent_list):
    if tree[n][2]:
        parent_list.append(tree[n][2])
        find_parent(tree[n][2], parent_list)


def find_common_parent(parent1, parent2):
    for p1 in parent1:
        for p2 in parent2:
            if p1 == p2:
                return p1


def find_subtree(n):
    global subtree_size
    for k in range(2):
        if tree[n][k]:
            subtree_size += 1
            find_subtree(tree[n][k])


if __name__ == "__main__":
    T = int(input())
    for tc in range(1, 1 + T):
        # ์ •์ ์ˆ˜ V, ๊ฐ„์„ ์ˆ˜ E, ๊ณตํ†ต์กฐ์ƒ์„ ์ฐพ๋Š” ๋‘๊ฐœ์˜ ์ •์ ๋ฒˆํ˜ธ N1,N2
        V, E, N1, N2 = map(int, input().split())

        adj_list = list(map(int, input().split()))

        # ์ž์‹ ๋…ธ๋“œ, ์ž์‹ ๋…ธ๋“œ, ๋ถ€๋ชจ ๋…ธ๋“œ
        tree = [[0] * 3 for _ in range(V + 1)]
        for i in range(E):
            s, e = adj_list[i * 2], adj_list[i * 2 + 1]
            if tree[s][0]:
                tree[s][1] = e
            else:
                tree[s][0] = e

            tree[e][2] = s

        # ๊ฐ๊ฐ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ
        N1_parent, N2_parent = [], []
        find_parent(N1, N1_parent)
        find_parent(N2, N2_parent)
        
        # ๊ณตํ†ต ๋ถ€๋ชจ ๋…ธ๋“œ
        common_parent = find_common_parent(N1_parent, N2_parent)
        
        # ๊ณตํ†ต ๋ถ€๋ชจ ๋…ธ๋“œ ์‚ฌ์ด์ฆˆ
        subtree_size = 1
        find_subtree(common_parent)

        print(f'#{tc} {common_parent} {subtree_size}')
        
        

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: SW Expert Academy

๋งํฌ: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15PTkqAPYCFAYD

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


[๋ฌธ์ œ]

 

์ด์ง„ ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ๋‘ ์ •์ ์˜ ๊ณตํ†ต ์กฐ์ƒ ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์„ ์ฐพ์œผ๋ ค ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ ์ด์ง„ ํŠธ๋ฆฌ์—์„œ ์ •์  8๊ณผ 13์˜ ๊ณตํ†ต ์กฐ์ƒ์€ ์ •์  3์™€ 1 ๋‘ ๊ฐœ๊ฐ€ ์žˆ๋‹ค.

์ด ์ค‘ 8, 13์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ์ •์  3์ด๋‹ค.

์ •์  3์„ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ(์„œ๋ธŒ ํŠธ๋ฆฌ์— ํฌํ•จ๋œ ์ •์ ์˜ ์ˆ˜)๋Š” 8์ด๋‹ค.


์ž„์˜์˜ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๋‘ ์ •์ ์ด ๋ช…์‹œ๋  ๋•Œ ์ด๋“ค์˜ ๊ณตํ†ต ์กฐ์ƒ ์ค‘ ์ด๋“ค์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ ์„ ์ฐพ๊ณ , ๊ทธ ์ •์ ์„ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ์—์„œ ์ฃผ์–ด์ง€๋Š” ๋‘ ์ •์ ์ด ์„œ๋กœ ์กฐ์ƒ๊ณผ ์ž์† ๊ด€๊ณ„์ธ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์œ„์˜ ํŠธ๋ฆฌ์—์„œ ์˜ˆ๋ฅผ ๋“ ๋‹ค๋ฉด ๋‘ ์ •์ ์ด “11๊ณผ 3”๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

[์ž…๋ ฅ]

๊ฐ€์žฅ ์ฒซ์ค„์€ ์ „์ฒด ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜์ด๋‹ค.

10๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘ ์ค„์ด ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์ „์ฒด ์ž…๋ ฅ์€ 20์ค„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

๊ฐ ์ผ€์ด์Šค์˜ ์ฒซ์ค„์—๋Š” ํŠธ๋ฆฌ์˜ ์ •์ ์˜ ์ด ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ์ด ์ˆ˜ E, ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ๋Š” ๋‘ ๊ฐœ์˜ ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค (์ •์ ์˜ ์ˆ˜ V๋Š” 10 ≤ V ≤ 10000 ์ด๋‹ค). 

๊ทธ ๋‹ค์Œ ์ค„์—๋Š” E๊ฐœ ๊ฐ„์„ ์ด ๋‚˜์—ด๋œ๋‹ค. ๊ฐ„์„ ์€ ๊ฐ„์„ ์„ ์ด๋ฃจ๋Š” ๋‘ ์ •์ ์œผ๋กœ, ํ•ญ์ƒ “๋ถ€๋ชจ ์ž์‹” ์ˆœ์„œ๋กœ ํ‘œ๊ธฐ๋œ๋‹ค.

์œ„์—์„œ ์˜ˆ๋กœ ๋“  ํŠธ๋ฆฌ์—์„œ ์ •์  5์™€ 8์„ ์ž‡๋Š” ๊ฐ„์„ ์€ “5 8”๋กœ ํ‘œ๊ธฐ๋˜๊ณ , ์ ˆ๋Œ€๋กœ “8 5”์™€ ๊ฐ™์ด ํ‘œ๊ธฐ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๊ฐ„์„ ์ด ์ž…๋ ฅ๋˜๋Š” ์ˆœ์„œ๋Š” ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค. ์ž…๋ ฅ์—์„œ ์ด์›ƒํ•œ ์ˆ˜๋Š” ๋ชจ๋‘ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

์ •์ ์˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€์˜ ์ •์ˆ˜์ด๋ฉฐ, ์ „์ฒด ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ๊ฐ€ ๋˜๋Š” ์ •์ ์€ ํ•ญ์ƒ 1๋ฒˆ์œผ๋กœ ํ‘œ๊ธฐ๋œ๋‹ค.

๋ถ€๋ชจ ์ •์ ์ด ์ž์‹ ์ •์ ๋ณด๋‹ค ํ•ญ์ƒ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ฆ‰, 40๋ฒˆ ์ •์ ์ด 20๋ฒˆ ์ •์ ์˜ ๋ถ€๋ชจ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ์ž์‹ ์ •์ ์ด ๋ถ€๋ชจ ์ •์ ์˜ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

[์ถœ๋ ฅ]

์ด 10์ค„์— 10๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐ๊ฐ์— ๋Œ€ํ•œ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

๊ฐ ์ค„์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•˜๋Š” ‘#x’๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ณต๋ฐฑ์„ ํ•˜๋‚˜ ๋‘” ๋‹ค์Œ ๋‹ต์„ ๊ธฐ๋กํ•œ๋‹ค.

๋‹ต์€ ๊ณตํ†ต์กฐ์ƒ ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์˜ ๋ฒˆํ˜ธ, ๊ทธ๊ฒƒ์„ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ๋œปํ•˜๋Š” 2๊ฐœ์˜ ์ •์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด ๋‘ ์ •์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•