๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿบ ๋งค์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์‚ฌ์ดํด์ด ์‹œ์ž‘๋˜๋Š” ๋…ธ๋“œ ์ฐพ๊ธฐ

leetcode 142. Linked List Cycle II ๋ฌธ์ œํ’€์ด

๋ฌธ์ œ: ์ฃผ์–ด์ง„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์ดํด์ด ์—†๋‹ค๋ฉด null์„, ์žˆ๋‹ค๋ฉด ์‚ฌ์ดํด์ด ์‹œ์ž‘๋˜๋Š” ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.

 

1. ์ฃผ์–ด์ง„ ๋…ธ๋“œ๋ฅผ Hash Set์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ˆœํšŒํ•œ๋‹ค.

2. ์ด๋ฏธ Hash Set์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ์‚ฌ์ดํด์ด ์‹œ์ž‘๋œ ๊ฒƒ์ด๋ฏ€๋กœ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

3. ๋ฌด์‚ฌํžˆ ์ˆœํšŒ๋ฅผ ๋๋ƒˆ์œผ๋ฉด ์‚ฌ์ดํด์ด ์—†๋Š” ๊ฒƒ ์ด๋ฏ€๋กœ, null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

141๋ฒˆ ์‚ฌ์ดํด ๊ฐ์ง€ํ•˜๊ธฐ ๋ฌธ์ œ์—์„œ ํ™œ์šฉํ•œ ํˆฌ ํฌ์ธํ„ฐ ํ…Œํฌ๋‹‰์„ ํ™œ์šฉํ•˜์—ฌ ๊ณต๊ฐ„์„ O(1)๋งŒํผ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

leetcode 141. Linked List Cycle ์‚ฌ์ดํด ๊ฐ์ง€ํ•˜๊ธฐ

leetcode 141. Linked List Cycle ๋ฌธ์ œํ’€์ด ๋ฌธ์ œ: ์ฃผ์–ด์ง„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ์‚ฌ์ดํด์ด ์žˆ๋‹ค๋ฉด true๋ฅผ ์—†๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ 1. ๊ฐ ๋…ธ๋“œ๋ฅผ set์— ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉฐ ์ˆœํšŒํ•œ๋‹ค. 2. ๋‹ค์Œ์— ์ˆœํšŒํ•  ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ set์— ๋“ค์–ด์žˆ๋‹ค..

allo-ew.tistory.com

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๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.