sladuf
200
sladuf
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (83)
    • ๐Ÿ“š Programming (32)
      • Swift (13)
      • JAVA (2)
      • Python (6)
      • SQL (6)
      • Web (5)
    • ๐Ÿ“ฑ iOS (25)
      • Base (7)
      • SwiftUI (9)
      • UIKit (7)
      • ์ธ๊ฐ• & ์ฑ… (2)
    • ๐Ÿ”— Algorithm (20)
      • Python (12)
      • Swift (3)
      • Tip (5)
    • ๐Ÿ—‚ ETC (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์Šค์œ„ํ”„ํŠธ
  • Swift

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ธ€์“ฐ๊ธฐ ์„ค์ •
hELLO ยท Designed By ์ •์ƒ์šฐ.
sladuf

200

[Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ”— Algorithm/Tip

[Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜

2021. 3. 28. 22:29

 

LCA๋Š” "Lowest Common Ancestor" ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

 

๋ฐฑ์ค€ 3584๋ฒˆ์„ ํ’€๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์žฅ

www.acmicpc.net/problem/3584

 

3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ

๋ฃจํŠธ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ(rooted tree)๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๊ทธ ํŠธ๋ฆฌ ์ƒ์˜ ๋‘ ์ •์ ์ด ์ฃผ์–ด์งˆ ๋•Œ ๊ทธ๋“ค์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ(Nearest Common Anscestor)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์€, ๋‘

www.acmicpc.net

 

 

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

๊ทธ๋ ‡๋‹ค๋ฉด a์™€b๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ์•„๋ณด์ž.

 

Rule

๐Ÿ“Œ a์˜ ์กฐ์ƒ์„ ๋ชจ๋‘ ์ฐพ์•„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค.

๐Ÿ“Œ b์˜ ์กฐ์ƒ์„ ๋ชจ๋‘ ์ฐพ์•„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค. (a,b์˜ ๋งˆ์ง€๋ง‰ ๋ฆฌ์ŠคํŠธ๋Š” root๋‹ค.)

๐Ÿ“Œ ๋‘ ๋ฆฌ์ŠคํŠธ ๋ชจ๋‘ root์—์„œ ์‹œ์ž‘ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ index-1 ํ•œ๋‹ค.

๐Ÿ“Œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด  index+1 ์— ์žˆ๋Š” ๊ฐ’์ด ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ์ด๋‹ค.

ex) a=3, b=2 ์ผ ๋•Œ

a_parents = [3, 16, 10, 4, 8]

b_parents = [2, 10, 4, 8]

๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๋‹ค๋ฅผ ๋•Œ a๋Š” 16์„ b๋Š” 2๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. index+1ํ•˜๋ฉด ๋‘˜ ๋‹ค 10์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ 3๊ณผ 2์˜ ๊ณตํ†ต ์กฐ์ƒ์€ 10์ด๋‹ค.

 

 

Code

import sys

t=int(sys.stdin.readline())
for case in range(t):
    n=int(sys.stdin.readline())
    parents=[0 for x in range(n+1)]
    for i in range(n-1):
        a,b=map(int, sys.stdin.readline().split())
        parents[b]=a

    a,b=map(int, sys.stdin.readline().split())
    a_parents=[a]
    b_parents=[b]
    #a์˜ ์กฐ์ƒ ์ฐพ๊ธฐ
    while parents[a]:
        a_parents.append(parents[a])
        a=parents[a]
    #b์˜ ์กฐ์ƒ ์ฐพ๊ธฐ
    while parents[b]:
        b_parents.append(parents[b])
        b=parents[b]
    
    #๋งˆ์ง€๋ง‰ ๊ฐ’์ด root์ด๋ฏ€๋กœ ๋์—์„œ ๋ถ€ํ„ฐ ์‹œ์ž‘
    a_spot=len(a_parents)-1
    b_spot=len(b_parents)-1
    while a_parents[a_spot]==b_parents[b_spot]:
        a_spot-=1
        b_spot-=1

    print(a_parents[a_spot+1])

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ”— Algorithm > Tip' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)  (0) 2022.02.17
[Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)  (0) 2022.01.31
[Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2021.03.11
[Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS  (0) 2020.08.24
    '๐Ÿ”— Algorithm/Tip' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)
    • [Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)
    • [Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS
    sladuf
    sladuf

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”