Skip to content

Commit

Permalink
add LCA
Browse files Browse the repository at this point in the history
  • Loading branch information
gyusuk committed Aug 25, 2019
1 parent 1459508 commit d4ad258
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions Algorithm/LCA(Lowest Common Ancestor).md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
## LCA(Lowest Common Ancestor) ์•Œ๊ณ ๋ฆฌ์ฆ˜

> ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
>
> โ†’ ๋‘ ์ •์ ์ด ๋งŒ๋‚˜๋Š” ์ตœ์ดˆ ๋ถ€๋ชจ ์ •์ ์„ ์ฐพ๋Š” ๊ฒƒ!
ํŠธ๋ฆฌ ํ˜•์‹์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž

<img src="https://media.geeksforgeeks.org/wp-content/cdn-uploads/lca.png" width=400>

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
```

<br>

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

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

์ด์ œ

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

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

<br>

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

0 comments on commit d4ad258

Please sign in to comment.