leetcode 141. Linked List Cycle ๋ฌธ์ ํ์ด
๋ฌธ์ : ์ฃผ์ด์ง ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฌ์ดํด์ด ์๋ค๋ฉด true๋ฅผ ์๋ค๋ฉด false๋ฅผ ๋ฐํํ๋ผ
Hash Set
1. ๊ฐ ๋ ธ๋๋ฅผ set์ ์ถ๊ฐํด๊ฐ๋ฉฐ ์ํํ๋ค.
2. ๋ค์์ ์ํํ ๋ ธ๋๊ฐ ์ด๋ฏธ set์ ๋ค์ด์๋ค๋ฉด true๋ฅผ ๋ฐํ.
3. ์ํ๋ฅผ ๋ฌด์ฌํ ๋ง์ณค๋ค๋ฉด ์ฌ์ดํด์ด ์๋ ๊ฒ์ด๋ฏ๋ก false๋ฅผ ๋ฐํ.
๋ชจ๋ ๋ ธ๋๋ฅผ set์ ์ ์ฅํ๋ ค๋ฉด O(N)๊ณต๊ฐ์ด ํ์ํ๋ค.
set์ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ๊ฒ ๋์ , ๋ ธ๋์ val๊ฐ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์์ ํ์ํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์์๋ค.
Two Pointer
ํฌ ํฌ์ธํฐ ํ ํฌ๋์ ํ์ฉํด์๋ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ O(1)์ผ๋ก ์ ํํ ์ ์๋ค.
ํฌ ํฌ์ธํฐ ํ ํฌ๋์ ํ ํฌ์ธํฐ๋ ๋ ๋น ๋ฅด๊ฒ ๋ ๋ค๋ฅธ ํฌ์ธํฐ๋ ๋ ๋๋ฆฌ๊ฒ ์์ง์ด๋๋กํ๋ ํ ํฌ๋์ ๋งํ๋ค.
์ ์ฝ๋์์ ๋๋ฆฐ ํฌ์ธํฐ๋ ๊ฑฐ๋ถ์ด(turtle) ๋น ๋ฅธ ํฌ์ธํฐ๋ ํ ๋ผ(rabbit)๋ก,
ํ ๋ผ๋ ๊ฑฐ๋ถ์ด๋ณด๋ค ํ ์คํ ๋น ๋ฅธ ์์น์์ ์์ํ์ฌ 2๋ฐ์๊ตญ์ฉ ์์ง์ด๊ณ ๊ฑฐ๋ถ์ด์ 1๋ฐ์๊ตญ์ฉ ์์ง์ธ๋ค.
๋ง์ฝ ์ฌ์ดํด์ด ์กด์ฌํ๋ค๋ฉด ๊ฑฐ๋ถ์ ๊ฒฐ๊ตญ ํ ๋ผ๋ฅผ ๋ง๋๊ฒ๋๋ค. ๋์ด ๋ง๋๋ค๋ฉด true๋ฅผ ๋ฐํํ๊ณ ,
๋์ด ๋ง๋์ง์๊ณ ํ ๋ผ๊ฐ ๋จผ์ ๊ฒฐ์น์ ์ ๋์ฐฉํ๋ค๋ฉด false๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
์ฌ๋ก1. ๋ง์ฝ ๊ฑฐ๋ถ์ด๊ฐ ํ ๋ผ๋ณด๋ค ํ ๋ฐ์๊ตญ ์์์๋ค๋ฉด,
๊ทธ ๋ค์ ๋จ๊ณ์์ ํ ๋ผ๋ ๋ ๋ฐ ์ ๊ฑฐ๋ถ์ด๋ ํ ๋ฐ ์์ผ๋ก ๋๊ฐ ๋์ด ๋ง๋๊ฒ ๋๋ค.
step 1 : [ ํ ๋ผ, ๊ฑฐ๋ถ์ด, # ]
step 2 : [ #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด ]
์ฌ์ดํด์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ ๋ผ์ ๊ฑฐ๋ถ์ด๋ ๊ฒฐ๊ตญ ์ฌ๋ก1์ ์๋ ดํ ๊ฒ์ด๋ฏ๋ก, ์ฌ์ดํด์ด ์กด์ฌํ ๋ ๋์ ์ธ์ ๊ฐ ๋ง๋๊ฒ๋๋ค.
step 1 : [ #, ๊ฑฐ๋ถ์ด, #, ํ ๋ผ ]
step 2 : [ #, ํ ๋ผ, ๊ฑฐ๋ถ์ด, # ]
step 3 : [ #, #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด ]
step 1 : [ ํ ๋ผ, #, #, #, #, ๊ฑฐ๋ถ์ด ]
step 2 : [ ๊ฑฐ๋ถ์ด, #, ํ ๋ผ, #, #, # ]
step 3 : [ #, ๊ฑฐ๋ถ์ด, #, #, ํ ๋ผ, # ]
step 4 : [ ํ ๋ผ, #, ๊ฑฐ๋ถ์ด, #, #, # ]
step 5 : [ #, #, ํ ๋ผ, ๊ฑฐ๋ถ์ด, #, # ]
step 5 : [ #, #, #, #, ํ ๋ผ์ ๊ฑฐ๋ถ์ด, # ]