leetcode 142. Linked List Cycle II ๋ฌธ์ ํ์ด
๋ฌธ์ : ์ฃผ์ด์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ์ฌ์ดํด์ด ์๋ค๋ฉด null์, ์๋ค๋ฉด ์ฌ์ดํด์ด ์์๋๋ ๋ ธ๋๋ฅผ ๋ฐํํ๋ผ.
1. ์ฃผ์ด์ง ๋ ธ๋๋ฅผ Hash Set์ ์ถ๊ฐํ๋ฉด ์ํํ๋ค.
2. ์ด๋ฏธ Hash Set์ ์๋ ๋ ธ๋๋ฅผ ๋ง๋๋ฉด ์ฌ์ดํด์ด ์์๋ ๊ฒ์ด๋ฏ๋ก ํด๋น ๋ ธ๋๋ฅผ ๋ฐํํ๋ค.
3. ๋ฌด์ฌํ ์ํ๋ฅผ ๋๋์ผ๋ฉด ์ฌ์ดํด์ด ์๋ ๊ฒ ์ด๋ฏ๋ก, null์ ๋ฐํํ๋ค.
141๋ฒ ์ฌ์ดํด ๊ฐ์งํ๊ธฐ ๋ฌธ์ ์์ ํ์ฉํ ํฌ ํฌ์ธํฐ ํ ํฌ๋์ ํ์ฉํ์ฌ ๊ณต๊ฐ์ O(1)๋งํผ๋ง ์ฌ์ฉํ ์ ์๋ค.
141๋ฒ์์๋ ํ ๋ฐ์๊ตญ์ฉ ์ด๋ํ๋ ํฌ์ธํฐ์ ๋ ๋ฐ์๊ตญ์ฉ ์ด๋ํ๋ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด, ์ฌ์ดํด ๋ด์ ์๋ ์๋ฌด ๋ ธ๋๋ฅผ ์ฐพ์๋ด๋ ๋ฌด๊ดํ๋ค๋ฉด, ์ด๋ฒ ๋ฌธ์ ์์๋ ์ฌ์ดํด์ด ์์๋๋ ๋ ธ๋๋ฅผ ์ฐพ์์ผํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
์ฌ๋ก1. ๋ง์ฝ ๊ฑฐ๋ถ์ด๊ฐ ํ ๋ผ๋ณด๋ค ํ ๋ฐ์๊ตญ ์์์๋ค๋ฉด,
๊ทธ ๋ค์ ๋จ๊ณ์์ ํ ๋ผ๋ ๋ ๋ฐ ์ ๊ฑฐ๋ถ์ด๋ ํ ๋ฐ ์์ผ๋ก ๋๊ฐ ๋์ด ๋ง๋๊ฒ ๋๋ค.
step 0 : [ ํ ๋ผ, ๊ฑฐ๋ถ์ด, # ]
step 1 : [ #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด ]
์ฌ์ดํด์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๋ ๊ฒฐ๊ตญ ์ฌ๋ก1์ ์๋ ดํ ๊ฒ์ด๋ฏ๋ก, ์ฌ์ดํด์ด ์กด์ฌํ ๋ ๋์ ์ธ์ ๊ฐ ๋ง๋๊ฒ๋๋ค.
step 0 : [ #, ๊ฑฐ๋ถ์ด, #, ํ ๋ผ ]
step 1 : [ #, ํ ๋ผ, ๊ฑฐ๋ถ์ด, # ]
step 2 : [ #, #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด ]
step 0 : [ ํ ๋ผ, #, #, #, #, ๊ฑฐ๋ถ์ด ]
step 1 : [ ๊ฑฐ๋ถ์ด, #, ํ ๋ผ, #, #, # ]
step 2 : [ #, ๊ฑฐ๋ถ์ด, #, #, ํ ๋ผ, # ]
step 3 : [ ํ ๋ผ, #, ๊ฑฐ๋ถ์ด, #, #, # ]
step 4 : [ #, #, ํ ๋ผ, ๊ฑฐ๋ถ์ด, #, # ]
step 5 : [ #, #, #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด, # ]
141๋ฒ ์ฒ๋ผ ํ ๋ผ์ ๊ฑฐ๋ถ์ด ํ ํฌ๋์ผ๋ก ๊ต์ฐจ์ ์ ์ฐพ์ ์ดํ์ ๋ฐ๊ฒฌํ ๊ต์ฐจ์ ๊ณผ head ๋ ธ๋๋ฅผ ์ด์ฉํด ์ฌ์ดํด์ด ์์๋๋ ๋ ธ๋๋ฅผ ์ฐพ์ ๊ฒ์ด๋ค. C๋ ์ฌ์ดํด ๋ด์ ์๋ ๋ ธ๋์ ์, F๋ ์ฌ์ดํด ์ด์ ์ ์๋ ๋ ธ๋์ ์๋ผ๊ณ ํ์ ๋. ์ฌ์ดํด๋ด์ ์๋ ๋ ธ๋๋ ์์๋๋ก 0๋ถํฐ C-1๊น์ง์ ๊ฐ์ผ๋ก, ์ฌ์ดํด ์ด์ ์ ๋ ธ๋๋ -F๋ถํฐ -1๊น์ง์ ๊ฐ์ผ๋ก ๋ํ๋ด๋๋ก ํ๊ฒ ๋ค.
-3, -2, -1, [ 0, 1, 2, 3, 4 ]
step 0 : ํ ๋ผ์ ๊ฑฐ๋ถ์ด, -2, -1, [ 0, 1, 2, 3, 4 ]
step 1 : -3, ๊ฑฐ๋ถ์ด, ํ ๋ผ, [ 0, 1, 2, 3, 4 ]
step 2 : -3, -2, ๊ฑฐ๋ถ์ด, [ 0, ํ ๋ผ, 1, 3, 4 ]
step 3 : -3, -2, -1, [๊ฑฐ๋ถ์ด, 1, 2, ํ ๋ผ, 4]
๊ฑฐ๋ถ์ด๊ฐ F๋งํผ ์ด๋ํด์ ์์น 0์ ๋๋ฌํ์ ๋, ํ ๋ผ๋ 2F๋งํผ ์ด๋ํด์ ์์น h = F + F % C์ธ 3 ์ ๋๋ฌํด ์๋ค. ํ ๋ผ๋ ์ฌ์ดํด์ด ์์๋๋ ๋ ธ๋๋ก๋ถํฐ C - h์ธ 5 - 3 = 2๋งํผ ๋จ์ด์ ธ์๋ค.
C- h = 5 - 3 = 2 ์คํ ๋ค, ๊ฑฐ๋ถ์ด๋ C- h์ธ 2์ ์์นํ ๊ฒ์ด๊ณ , ํ ๋ผ๋ h + 2(C-h) = 2C - h ๋ฅผ %C ํ ๊ณณ์ ์์นํ ๊ฒ์ด๋ค. ๊ฐ์ ๋์ ํด์ ํ์ด๋ณด์๋ฉด, (2*5 - 3)%5 = 2 2C - h ๋ก ๊ฑฐ๋ถ์ด์ ๊ฐ์ ๋ ธ๋์์ ๋ง๋๋ค.
step 4 : [ ํ ๋ผ, ๊ฑฐ๋ถ์ด, 2, 3, 4 ]
step 5 : [ 0, 1, ํ ๋ผ์ ๊ฑฐ๋ถ์ด, 3, 4 ]
์ด๋ ๊ฒ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๊ฐ ๊ต์ฐจํ๋ ๋ ธ๋๋ฅผ ์ฐพ์๋ค. ํ์ง๋ง ์ด ๋ ธ๋๋ ์ฌ์ดํด์ด ์์ํ๋ ๊ณณ์ ์๋๋ค.
์ฌ์ดํด์ด ์์ํ๋ ๊ณณ์ ์ฐพ๊ธฐ ์ํด ๋ฆฌ์คํธ์ ์ฒซ ๋ ธ๋์ ํ ๋ผ์ ๊ฑฐ๋ถ์ด์ ์ฒซ ๊ต์ฐจ์ ์ ๋๊ฐ์ ์๋๋ก ์ํํ ๊ฒ์ด๋ค.
step 0 : ํค๋, -2, -1, [ 0, 1, ์ฒซ ๊ต์ฐจ์ , 3, 4 ]
step 1 : -3, ํค๋, -1, [ 0, 1, 2, ์ฒซ ๊ต์ฐจ์ , 4 ]
step 2 : -3 -2, ํค๋, [ 0, 1, 2, 3, ์ฒซ ๊ต์ฐจ์ , ]
step 3 : -3, -2, -1, [ํค๋์ ๊ต์ฐจ์ , 1, 2, 3, 4 ]
ํค๋๋ ธ๋๊ฐ F+1๋งํผ ์ด๋ํด ์ฌ์ดํด์ด ์์ํ๋ ๊ณณ์ ๋๋ฌํ์ ๋ ์ฒซ ๊ต์ฐจ์ ๋ ธ๋์ ๋ง๋๊ฒ๋๋ค. ์ด๋ป๊ฒ ์ด๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น? ์ด๋ F = b์ด๊ธฐ ๋๋ฌธ์ด๋ค.
F = ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋ ๋ถ๋ถ์ ๊ธธ์ด
a = ์ฒซ ๊ต์ฐจ์ ์ ์์น
b = ์ฌ์ดํด์ ๊ธธ์ด - ์ฒซ ๊ต์ฐจ์ ์ ์์น
์ผ๋,
2 * ๊ฑฐ๋ถ์ด๊ฐ ์ด๋ํ ๊ฑฐ๋ฆฌ = ํ ๋ผ๊ฐ ์ด๋ํ ๊ฑฐ๋ฆฌ
2(F+a) = F + a + b + a
2F + 2a = F + 2a + b
F = b
Tortoise and Hare algorithm ๋จ์์ด์ ์ฐํ ๋ผ ์๊ณ ๋ฆฌ์ฆ..?์ด ๋ง๋ ๋ช ์นญ์ด์ง๋ง,
๋๋ rabbit and turtle์ด ํ ๋ผ์ ๊ฑฐ๋ถ์ด ์ฐํ๋ฅผ ์ฐ์ํ๋๋ฐ ๋ ์ง๊ด์ ์ด์ฌ์ ๋ณ์๋ช ์ rabbit๊ณผ turtle๋ก ์ฌ์ฉํ๋ค.