notion-027

๐Ÿ˜‰ ํ—ท๊ฐˆ๋ ธ๋˜ & ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋‚˜๋งŒ์˜ TIL
๐Ÿ˜ฏ ๋ชจ๋“  ๊ฐ•์˜ ๋‚ด์šฉ์€ ์ ์ง€ ์•Š์•„์š”!

์˜ค๋Š˜์˜ ์†Œ๊ฐ์€?
๋„ˆ๋ฌด ์œ ์ตํ•œ ์ˆ˜์—…์ด์—ˆ๋‹ค.
ํŠนํžˆ Big-O ํ‘œ๊ธฐ๋ฒ•์„ ๋Œ€๋žต์ ์œผ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ •๋ง ์ฐจ๊ทผ์ฐจ๊ทผ ๋“ค์—ฌ๋‹ค๋ณผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€๋‹ค.

๋˜ํ•œ ์—ญ์‹œ ์ฝ”๋“œ ์ž‘์„ฑ์€ ๋„ˆ๋ฌด๋‚˜๋„ ์žฌ๋ฐŒ๋‹ค.
์ด๋ก  ๊ณต๋ถ€๋งŒ ํ•˜๋‹ค๊ฐ€ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋‹ˆ ํ™˜๊ธฐ๋˜๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค..

DoublyLinkedList ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์กฐ๊ธˆ ์• ๋ฅผ ๋จน์—ˆ๋‹ค. ๐Ÿ˜ฃ
์ž๊พธ ์ˆœํšŒ ๊ตฌ์กฐ๊ฐ€ ์ƒ๊ฒจ์„œ [Circular *n]์ด ์ถœ๋ ฅ๋˜๋Š”.. ๋‚˜์˜ ๋ชป๋‚œ์ด ์ฝ”๋“œ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋Œ€๋น„ ๋ฌธ์ œ๋งŒ ํ’€๋‹ค๊ฐ€, ์ด๋ ‡๊ฒŒ ๊ทผ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ๋„ ์˜ค๋žœ๋งŒ์ธ๋ฐ ์ดˆ์‹ฌ์œผ๋กœ ๋Œ์•„๊ฐ„ ๊ธฐ๋ถ„์ด์—ˆ๋‹ค.
๊ธฐ์ดˆ๊ฐ€ ํƒ„ํƒ„ํ•ด์•ผ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์‰ฝ๋‹ค! ๊ผญ ๊ธฐ์–ตํ•˜์ž.




[1] ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ๋ง ๊ทธ๋Œ€๋กœ ํŠน์ •ํ•œ ์ž๋ฃŒ์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.


์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ •ํ•ด์ง„ ์ผ๋ จ์˜ ์ ˆ์ฐจ๋‚˜ ๋ฐฉ๋ฒ•์„ ๊ณต์‹ํ™”ํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ํŠน์ • ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.


[1-1] ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜

๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” 4๊ฐœ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์ง€๋งŒ, ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœ ๊ตฌ์กฐ
    • ์ •์ˆ˜
    • ์‹ค์ˆ˜
    • ๋ฌธ์ž์—ด
    • ๋…ผ๋ฆฌ
  • ์„ ํ˜• ๊ตฌ์กฐ
    • ๋ฐฐ์—ด
    • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
    • ์Šคํƒ
    • ํ
  • ๋น„์„ ํ˜• ๊ตฌ์กฐ
    • ํŠธ๋ฆฌ
    • ๊ทธ๋ž˜ํ”„


[1-2] ์„ ํ˜• ๊ตฌ์กฐ

์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜์ธ ์„ ํ˜• ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ ํ˜• ๊ตฌ์กฐ๋ž€, ํ•œ ์›์†Œ ๋’ค์— ํ•˜๋‚˜์˜ ์›์†Œ๋งŒ ์กด์žฌํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ž๋ฃŒ๋“ค์ด ์„ ํ˜•์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.


[1-3] ๋น„์„ ํ˜• ๊ตฌ์กฐ

๋น„์„ ํ˜• ๊ตฌ์กฐ๋ž€, ์›์†Œ ๊ฐ„ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ๋กœ ๊ณ„์ธต์  ๊ตฌ์กฐ๋‚˜ ๋งํ˜• ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์„ ํ˜• ๊ตฌ์กฐ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์›์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›์†Œ์™€ ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ˜Š ์™„๋ฒฝํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. >

๋” ์ข‹๊ณ  ๋” ๋‚˜์œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
ํŠน์ • ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋œ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.




[2] ์‹œ๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์˜ ํ•˜๋‚˜์ธ Big-O notation์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Untitled

Untitled 1

(์ƒ์ˆ˜ํ•จ์ˆ˜ < ๋กœ๊ทธํ•จ์ˆ˜ < ์„ ํ˜•ํ•จ์ˆ˜ < ๋‹คํ•ญํ•จ์ˆ˜ < ์ง€์ˆ˜ํ•จ์ˆ˜)

์„ ํ˜•์‹œ๊ฐ„(O(n))์€ ์ผ๋ฐ˜์ ์ธ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ ๋งŒํผ

๋กœ๊ทธ์‹œ๊ฐ„(O(log n))์€ ์ž…๋ ฅ๋ฐ›์€ n์— ๋กœ๊ทธ๋ฅผ ์”Œ์šด ๋งŒํผ ๋ฃจํ”„๋ฅผ ๋Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์„ ํ˜• ๋กœ๊ทธ์‹œ๊ฐ„((O(n log n))๊ณผ ์ด์ฐจ ์‹œ๊ฐ„(O(n^2))์€ ๋‹จ์ˆœํžˆ ๋‘ ์‹œ๊ฐ„์„ ๊ณฑํ•œ ๊ฐ’์ด ๊ฐ๊ฐ์˜ ์‹œ๊ฐ„์ด ๋ฉ๋‹ˆ๋‹ค. (์„ ํ˜• _ ๋กœ๊ทธ / ์„ ํ˜• _ ์„ ํ˜•)


๋ณดํ†ต์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ ์–ด๋„ O(n^3) ์ด์ƒ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉด ์•ˆ ๋˜๋Š” ๋ฌธ์ œ๋“ค์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.


[2-1] Big-O ํ‘œ๊ธฐ๋ฒ• ๋ฒ•์น™

  • ๊ณ„์ˆ˜๋ฒ•์น™

์ƒ์ˆ˜ k๊ฐ€ 0๋ณด๋‹ค ํด ๋•Œ, f(n) - O(g(n))์ด๋ฉด kf(n) = O(g(n))์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋‹จ์ˆœํ•œ ๋ฐ˜๋ณต๋ฌธ์˜ n์ด ์–ผ๋งˆ๋“ , n์ด ๋ฌดํ•œ์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก k์˜ ํฌ๊ธฐ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋˜‘๊ฐ™์ด O(n)์œผ๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ฉ์˜ ๋ฒ•์น™

f(n) = O(h(n))์ด๊ณ  g(n) = O(p(n))์ด๋ฉด f(n) + g(n) = O(h(n)) + O(p(n))์ด๋‹ค. (๋”ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.)

๋‘ ๊ฐœ์˜ ๊ฐ ๋ฐ˜๋ณต๋ฌธ์ด ์žˆ์„ ๋•Œ, i์˜ ๋ฒ”์œ„๊ฐ€ ํ•˜๋‚˜๋Š” n๊นŒ์ง€๊ณ  ํ•˜๋‚˜๋Š” m๊นŒ์ง€๋ผ ํ•˜๋ฉด ๋‘ ๋ฃจํ”„๋ฅผ ํ•ฉ์ณ O(n+m)๋กœ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณฑ์˜ ๋ฒ•์น™

f(n) = O(h(n))์ด๊ณ  g(n) = O(p(n))์ด๋ฉด f(n) _ g(n) = O(h(n)) _ O(p(n))์ด๋‹ค. (๊ณฑํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.)

๋‘ ๊ฐœ์˜ ๊ฐ ๋ฐ˜๋ณต๋ฌธ์ด ์ค‘์ฒฉ๋˜์–ด ์žˆ์„ ๋•Œ, i๊ฐ€ n๊นŒ์ง€๊ณ  j๋„ n๊นŒ์ง€๋ผ ํ•˜๋ฉด ๋‘ ๋ฃจํ”„๋ฅผ ๊ณฑํ•ด O(n^2)๋กœ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹คํ•ญ ๋ฒ•์น™

f(n)์ด k์ฐจ ๋‹คํ•ญ์‹์ด๋ฉด f(n)์€ O(n^k)์ด๋‹ค.

ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ์—์„œ i๊ฐ€ n _ n _ n๊นŒ์ง€๋ผ ํ•˜๋ฉด O(n^3)์œผ๋กœ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜Š Big-O ํ‘œ๊ธฐ๋ฒ• ํฌ์ธํŠธ

  1. ์ƒ์ˆ˜ํ•ญ ๋ฌด์‹œ
  2. ๊ฐ€์žฅ ํฐ ํ•ญ ์™ธ์— ๋ฌด์‹œ
  3. JS์—์„œ ์„ฑ๋Šฅ(์†Œ์š” ์‹œ๊ฐ„)์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” Date๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




[3] ๋ฐฐ์—ด (์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ, Array)

๋ฐฐ์—ด์€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์ธ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, index๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ ์ถ”๊ฐ€/ ์‚ญ์ œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…๋ณด๋‹ค, ํƒ์ƒ‰์— ์œ ๋ฆฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.


[3-1] ๋ฐฐ์—ด์˜ ํŠน์ง•

  • ๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋ก  ๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

โ†’ ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ฒ˜๋Ÿผ ๋Œ€๋ถ€๋ถ„์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด(python, Ruby โ€ฆ)๋Š” ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ๋˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์›ํ•˜๋Š” ์›์†Œ์˜ index๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด O(1)(์ƒ์ˆ˜์‹œ๊ฐ„)๋กœ ์›์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น index์— ๋นˆ์ž๋ฆฌ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.


[3-2] JS ๋ฐฐ์—ด

JS์˜ Array๋Š” HashMap์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. (๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด ํƒ€์ž…์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.)

๋˜ํ•œ index๊ฐ€ number๊ฐ€ ์•„๋‹ˆ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

arr["string"] = 10;
arr[false] = 0;

๋ฐฐ์—ด์˜ key๊ฐ’ ์ถ”๊ฐ€๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋˜์–ด key๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ˜Š ์ด๋Ÿฐ ์‹์˜ ์‚ฌ์šฉ์€ ์ถ”์ฒœํ•˜์ง€ ์•Š์ง€๋งŒ, ์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.




[4] ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ์š”์†Œ๋ฅผ ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๊ฐ ์š”์†Œ๋Š” ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ๋ฐ์ดํ„ฐ ์˜์—ญ๊ณผ ํฌ์ธํ„ฐ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.


[4-1] ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํŠน์ง•

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง•์€ ๋ฐฐ์—ด๊ณผ ์ƒ๋ฐ˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ํ•œ ์š”์†Œ๋ฅผ ์ œํ•œ ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ์ƒ‰์€ O(n)์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  • ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ๋•Œ๋Š” O(1)์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  • Singly Linked List, Doubly Linked List, Circular Linked List๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


[4-2] ๋ฐฐ์—ด๊ณผ ์ฐจ์ด์ฒจ

  • ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ด

๋ฐฐ์—ด์€ ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์„ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ โ†’ ๊ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ ์‚ฌ์šฉ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„

์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ : ๋ฐฐ์—ด์€ O(n), ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” O(1)


[+] ๊ณผ์ œ ์ฝ”๋“œ

  • ๊ณผ์ œ 1-1 - size ๋ฉ”์†Œ๋“œ ๋งŒ๋“ค๊ธฐ
// method
size() {
	let curNode = this.head;
	let count = 0;
	while(curNode !== null){
		curNode = curNode.next;
		count += 1;
	}

	console.log('size :',count);
}

// console
linkedList.size(); // 4 ([1, 2, 10, 5]์ผ ๊ฒฝ์šฐ)


  • ๊ณผ์ œ 1-2 - ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•˜๊ธฐ

(1) find method, remove method : ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

(2) insert method : find๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

// find method
find(val) {
	let curNode = this.head;
	try{
		while (curNode.val !== val){
			curNode = curNode.next;
		}
	} catch(error) {
		console.log("find : ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.");
		return false;
	}
	return curNode;
}

// remove method
remove(val) {
	let preNode = this.head;
	while(preNode.next.val !== val) {
		preNode = preNode.next;

		if (preNode.next === null){
			console.log("remove : ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.")
			return false;
		}
	}

	if (preNode.next !== null) {
		preNode.next = preNode.next.next;
	}
}

// insert method
insert(node, newVal){
	if (node === false) {
		console.log("insert : ์ž˜๋ชป๋œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.");
		return false;
	}
	const newNode = new Node(newVal);
	newNode.next = node.next;
	node.next = newNode;
}

// console
linkedList.remove(3);
linkedList.insert(linkedList.find(10), 10); // [1, 2, 5]์ผ ๊ฒฝ์šฐ

// remove : ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
// find : ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.
// insert : ์ž˜๋ชป๋œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

(3) display method : ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด ์ถœ๋ ฅ ์‹œ โ€˜[โ€™ ์ƒ๋žต๋˜๋Š” ์ด์Šˆ

//display method
display() {
	let curNode = this.head;
	let displayString = "[";
	while (curNode !== null) {
		displayString += `${curNode.val}, `;
		curNode  = curNode.next;
	}
	displayString = displayString.substr(0, displayString.length - 2);

	if (displayString === ""){
		displayString += "[";
	}

	displayString += "]"
	console.log(displayString);
}

// answer
const linkedList = new SingleLinkedList();
linkedList.size(); // 0
linkedList.display(); // []

๐Ÿ˜… ๋ถ„๋ช…ํžˆ ๋” ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ.. ๊ณ„์† ๊ณ ๋ฏผํ•ด๋ณด์ž


  • ๊ณผ์ œ 2 - DoublyLinkedList ๊ตฌํ˜„

์šฐ์„  DoublyLinkedList๋Š” ์•ž๊ณผ ๋’ท๋ถ€๋ถ„์„ ๋‹ค ์—ฐ๊ฒฐํ•ด๋†“๊ธฐ ๋•Œ๋ฌธ์— (์–‘๋ฐฉํ–ฅ) ์•ž๋ถ€๋ถ„ insert, ๋’ท๋ถ€๋ถ„ insert๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„๋งŒ ์ฒจ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

// Node class
class Node {
	constructor(val){
		this.val = val;
		this.previous = null;
		this.next = null;
	}
}

// insertNext method
insertNext(node, newVal){
	if (node === false) {
		console.log("insert : ์ž˜๋ชป๋œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.");
		return false;
	}
	const newNode = new Node(newVal);
	newNode.next = node.next;
	node.next.previous = newNode;
	node.next = newNode;
	newNode.previous = node;
}

// insertPrevious method
insertPrevious(node, newVal){
	if (node === false) {
		console.log("insert : ์ž˜๋ชป๋œ ์œ„์น˜์ž…๋‹ˆ๋‹ค.");
		return false;
	}
	const newNode = new Node(newVal);
	newNode.previous = node.previous;
	node.previous.next = newNode;
	node.previous = newNode;
	newNode.next = node;
}

// console (append ์ƒ๋žต)
linkedList.display(); // [1, 2, 5]
linkedList.insertNext(linkedList.find(1), 10);
linkedList.display(); // [1, 10, 2, 5]
linkedList.insertPrevious(linkedList.find(2), 7);
linkedList.display(); // [1, 10, 7, 2, 5]

Untitled 2

1 ๋’ท๋ถ€๋ถ„์— ์ถ”๊ฐ€๋˜๊ณ  2 ์•ž๋ถ€๋ถ„์— ์ž˜ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


  • ๊ณผ์ œ 3 - CircularLinkedList ๊ตฌํ˜„

๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ next๊ฐ€ ๋‹ค์‹œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” CircularLinkedList ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•ด๋ด…์‹œ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ณ„๋กœ ์—†์œผ๋ฏ€๋กœ append ํ•จ์ˆ˜๋งŒ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

// append method
append(newVal) {
	const newNode = new Node(newVal);
	if (this.head === null){
		this.head = newNode;
		this.tail = newNode;
		newNode.next = this.head; // next ์ˆœํšŒ
	}
	else {
		this.tail.next = newNode;
		this.tail = newNode;
		newNode.next = this.head;// next ์ˆœํšŒ
	}

	console.log(newNode);
}

// ์ด์™ธ์˜ ๋ฉ”์†Œ๋“œ์˜ curNode === null ์กฐ๊ฑด์„ ๋ชจ๋‘ this.head๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.
// if๋ฌธ ๋ฐ–์œผ๋กœ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋นผ์ฃผ๋ฉด ๋˜์ง€๋งŒ, ์›๋ฆฌ ์ดํ•ด์˜ ๋ชฉ์ ์œผ๋กœ ์ค‘๋ณต ์ž‘์„ฑํ–ˆ๋‹ค.

Untitled 3

5์˜ ๊ฐ’์„ ๊ฐ€์ง„ 5 ์š”์†Œ์˜ next๊ฐ€ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์ธ 1 node๋กœ ์ž˜ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 4

์ƒˆ๋กœ ๋งŒ๋“  size method์™€ find ์—ญ์‹œ ๋ฐ‘์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•ด์„œ ์ œ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

if (curNode === this.head){
	break
}




[5] ์Šคํƒ (Stack)

LIFO ๊ฐœ๋…์„ ๊ฐ€์ง„ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ Call Stack์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Stack์€ ๋ฐฐ์—ด์˜ push, pop๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.




[6] ์‹ค์Šต ์ฝ”๋“œ

function solution(s) {
  s_arr = s.split("");
  let arr = [];

  for (item of s_arr) {
    if (item === "(") {
      arr.push(item);
    } else {
      if (arr.length === 0) {
        return false;
      }
      arr.pop();
    }
  }

  if (arr.length >= 1) {
    return false;
  }

  return true;
}

์ง ๋งž์ถ”๋Š” ๋ฌธ์ œ๋Š” stack์„ ์ด์šฉํ•˜๋ฉด ํŽธํ•˜๋‹ค.
๋‚˜๋ฆ„ ์†”๋ฃจ์…˜๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ’€์–ด์„œ ๊ธฐ๋ถ„์ด ์ข‹์•„์š” ๐Ÿ˜‹





์ถœ์ฒ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

https://noahlogs.tistory.com/27

์นดํ…Œ๊ณ ๋ฆฌ: ,

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ