Skip to content

Latest commit

ย 

History

History
52 lines (36 loc) ยท 1.49 KB

LCA(Lowest Common Ancestor).md

File metadata and controls

52 lines (36 loc) ยท 1.49 KB

LCA(Lowest Common Ancestor) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ†’ ๋‘ ์ •์ ์ด ๋งŒ๋‚˜๋Š” ์ตœ์ดˆ ๋ถ€๋ชจ ์ •์ ์„ ์ฐพ๋Š” ๊ฒƒ!

ํŠธ๋ฆฌ ํ˜•์‹์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž

4์™€ 5์˜ LCA๋Š”? โ†’ 4์™€ 5์˜ ์ฒซ ๋ถ€๋ชจ ์ •์ ์€ '2'

4์™€ 6์˜ LCA๋Š”? โ†’ ์ฒซ ๋ถ€๋ชจ ์ •์ ์€ root์ธ '1'

์–ด๋–ป๊ฒŒ ์ฐพ์ฃ ?

ํ•ด๋‹น ์ •์ ์˜ depth์™€ parent๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ˜„์žฌ ๊ทธ๋ฆผ์—์„œ์˜ depth๋Š” ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

[depth : ์ •์ ]
0 โ†’ 1(root ์ •์ )
1 โ†’ 2, 3
2 โ†’ 4, 5, 6, 7

parent๋Š” ์ •์ ๋งˆ๋‹ค ๊ฐ€์ง€๋Š” ๋ถ€๋ชจ ์ •์ ์„ ์ €์žฅํ•ด๋‘”๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ ์ €์žฅ๋œ parent ๋ฐฐ์—ด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// 1 ~ 7๋ฒˆ ์ •์  (root๋Š” ๋ถ€๋ชจ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— 0)
int parent[] = {0, 1, 1, 2, 2, 3, 3}

์ด์ œ

์ด ๋‘ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•ด์„œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ LCA๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// ๋‘ ์ •์ ์˜ depth ํ™•์ธํ•˜๊ธฐ
while(true){
	if(depth๊ฐ€ ์ผ์น˜)
		if(๋‘ ์ •์ ์˜ parent ์ผ์น˜?) LCA ์ฐพ์Œ(์ข…๋ฃŒ)
        else ๋‘ ์ •์ ์„ ์ž์‹ ์˜ parent ์ •์  ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ
    else // depth ๋ถˆ์ผ์น˜
        ๋” depth๊ฐ€ ๊นŠ์€ ์ •์ ์„ ํ•ด๋‹น ์ •์ ์˜ parent ์ •์ ์œผ๋กœ ๋ณ€๊ฒฝ(depth๊ฐ€ ๊ฐ์†Œ๋จ)
}

ํŠธ๋ฆฌ ๋ฌธ์ œ์—์„œ ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ์•„์•ผํ•˜๋Š” ๋ฌธ์ œ๋‚˜, ์ •์ ๊ณผ ์ •์  ์‚ฌ์ด์˜ ์ด๋™๊ฑฐ๋ฆฌ ๋˜๋Š” ๋ฐฉ๋ฌธ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.