๋ชฉ๋ก๐Ÿ‘ฉ‍๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (110)

๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Coding Interview University] ์Šคํƒ : ์ด๋ก  ๋ฐ ๊ตฌํ˜„

๐Ÿซง ์Šคํƒ : ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„ ์˜ฌ๋ฆฐ๋‹ค : LIFO (Last In First Out) ์— ๋”ฐ๋ผ ์ž๋ฃŒ๋ฅผ ๋ฐฐ์—ดํ•œ๋‹ค : ๊ฐ€์žฅ ์ตœ๊ทผ์— ์Šคํƒ์— ์ถ”๊ฐ€ํ•œ ํ•ญ๋ชฉ์ด ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ๋  ํ•ญ๋ชฉ : ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์Šคํƒ์€ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— i ๋ฒˆ์งธ ํ•ญ๋ชฉ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ : ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์€ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ๊ฐ€๋Šฅํ•˜๋‹ค ๐Ÿซง ์Šคํƒ์ด ์œ ์šฉํ•  ๊ฒฝ์šฐ : ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•จ : ์žฌ๊ท€์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์— ๋„ฃ์–ด ์ฃผ๊ณ , ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ ๋‚˜์™€ ํ‡ด๊ฐ ๊ฒ€์ƒ‰(backtrack) ํ•  ๋•Œ๋Š” ์Šคํƒ์— ๋„ฃ์–ด ์ฃผ์—ˆ๋˜ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ ์ค˜์•ผ ํ•œ๋‹ค : ์ผ๋ จ์˜ ํ–‰์œ„๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค : ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜๋ณต์  ํ˜•ํƒœ (iterative) ๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ ๐Ÿซง ์Šคํƒ ๊ตฌํ˜„ํ•˜๊ธฐ funct..

[Coding Interview University] ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ : ์ด๋ก  ๋ฐ ๊ตฌํ˜„

๐Ÿซง ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ์ฐจ๋ก€๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ : ๋‹จ) ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ํŠน์ • ์ธ๋ฑ์Šค๋ฅผ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค (k๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐพ๊ณ ์‹ถ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ k๋ฒˆ ๋ฃจํ”„ ๋Œ์•„์•ผํ•จ) : ์žฅ) ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ์ง€์ ์—์„œ ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ํ•  ์ˆ˜ ์žˆ๋‹ค ๋‹จ๋ฐฉํ–ฅ ๊ฐ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ ๊ฐ€๋ฆฌํ‚ด ์–‘๋ฐฉํ–ฅ ๊ฐ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ์™€ ์ด์ „ ๋…ธ๋“œ๋ฅผ ํ•จ๊ป˜ ๊ฐ€๋ฆฌํ‚ด ๐Ÿ’– (๋‹จ๋ฐฉํ–ฅ) ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ class Node { Node next = null; int data; public Node(int d) { data = d; } void appendToTail(int d) { Node end = new Node(d); Node n = this; while (n.next != null) { n = n.next;..

[Coding Interview University] ๋ฐฐ์—ด : ์ด๋ก  ๋ฐ ๊ตฌํ˜„

๐Ÿซง ๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด โค๏ธ ํ•ด์‹œํ…Œ์ด๋ธ” (hash table) : ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ, key๋ฅผ value ์— ๋Œ€์‘์‹œํ‚ด : ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n) // n์€ ํ‚ค์˜ ๊ฐœ์ˆ˜ : ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(1) 1) ํ‚ค์˜ ํ•ด์‹œ ์ฝ”๋“œ ๊ณ„์‚ฐ ํ‚ค์˜ ์ž๋ฃŒํ˜•์€ ๋ณดํ†ต int or long ํ‚ค์˜ ๊ฐœ์ˆ˜ ๋ฌดํ•œ (int ๋Š” ์œ ํ•œ) 2) hash(key) % array_length ๋ฐฉ์‹์œผ๋กœ ํ•ด์‹œ ์ฝ”๋“œ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๊ตฌํ•จ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Œ 3) ๋ฐฐ์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค์—๋Š” ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์กด์žฌ ํ‚ค์™€ ๊ฐ’์„ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์ €์žฅ (๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ด์šฉ!) ๐Ÿ’ฅ ์ถฉ๋Œ : ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜, ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ ⇒ ..

[Coding Interview University] ๋น…์˜ค(Big-O)ํ‘œ๊ธฐ๋ฒ•

๐Ÿซง ๋น„์œ ํ•˜๊ธฐ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๋‹ค๋ฉด ? ์˜จ๋ผ์ธ์œผ๋กœ ์ „์†ก ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋ฌด์ง€๋ง‰ํ•˜๊ฒŒ ํฌ๋‹ค๋ฉด ? ์šด์ „ or ๋น„ํ–‰๊ธฐ๐Ÿš€ ๐Ÿซง ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ ๊ทผ์  ์‹คํ–‰ ์‹œ๊ฐ„ (asymptotic runtime), big-O ์‹œ๊ฐ„ ๊ฐœ๋… ์˜จ๋ผ์ธ ์ „์†ก : O(s), s๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ „์†ก ์‹œ๊ฐ„์ด ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ ๋น„ํ–‰๊ธฐ ์ „์†ก : ํŒŒ์ผ์˜ ํฌ๊ธฐ ์ƒ๊ด€์—†์ด O(1) ์ƒ์ˆ˜์‹œ๊ฐ„๋งŒํผ ์†Œ์š” โค๏ธ big-O : ์‹œ๊ฐ„์˜ ์ƒํ•œ : ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ : O(n) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, O(n^3) ํ˜น์€ O(n) ๋ณด๋‹ค ํฐ ์–ด๋–ค ์ˆ˜ํ–‰ ์‹œ๊ฐ„์œผ๋กœ ๊ฐ€๋Šฅ โค๏ธ big-Ω (omega) : ๋“ฑ๊ฐ€ or ํ•˜ํ•œ : Ω(n) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Ω(log N) ํ˜น์€ Ω(1) ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ โค๏ธ big-θ (theta) : O์™€ Ω ๋‘˜ ๋‹ค ์˜๋ฏธ (๋”ฑ ๋งž๋Š”..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ํ•œ ํ•œ๋ฐœ์ง ๋‘๋ฐœ์ง๐Ÿพ] ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ

=> ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ | ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉํ…Œ์ŠคํŠธ & ๋ฉด์ ‘ ์ง€์‹ ๐Ÿซง ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ : ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ (complete binary tree) ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ : A๊ฐ€ B์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์ด๋ฉด, A์˜ ํ‚ค ๊ฐ’๊ณผ B์˜ ํ‚ค ๊ฐ’ ์‚ฌ์ด์—๋Š” ๋Œ€์†Œ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋œ๋‹ค - ์ตœ๋Œ€ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํ•ญ์ƒ ํฐ ํž™ ๊ฐ€์ง left : i * 2 + 1 right : i * 2 + 2 parent : (i - 1) / 2 - ์ตœ์†Œ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํ•ญ์ƒ ์ž‘์€ ํž™ ๊ฐ€์ง ๐Ÿซง ํž™(heap) ์ฃผ์š” ๋ฉ”์„œ๋“œ peek() : ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’ ๋ฆฌํ„ด size() : ํž™ ์‚ฌ์ด์ฆˆ ๋ฆฌํ„ด isEmpty() ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ํ•œ ํ•œ๋ฐœ์ง ๋‘๋ฐœ์ง๐Ÿพ] ํŠธ๋ฆฌ(tree) ์ž๋ฃŒ๊ตฌ์กฐ

=> ์ฝ”๋”ฉํ…Œ์ŠคํŠธ & ๊ธฐ์ˆ ๋ฉด์ ‘ ์„ ์œ„ํ•œ ํŠธ๋ฆฌ(tree) ์ž๋ฃŒ๊ตฌ์กฐ ๐Ÿซง ํŠธ๋ฆฌ(tree) ์ž๋ฃŒ๊ตฌ์กฐ : ๋…ธ๋“œ์˜ ์•ž ๋’ค ๊ด€๊ณ„๊ฐ€ 1:N or N:M : ๋น„์„ ํ˜• ๊ณ„์ธต์  ๊ตฌ์กฐ : ํ•˜๋‚˜์˜ tree ์—๋Š” ํ•˜๋‚˜์˜ root ๊ฐ€ ์žˆ์Œ : ๊ฐ node ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ํ‘œํ˜„๋จ : node ์— ๋ฐ์ดํ„ฐ์™€ ์ž์‹ ๋…ธ๋“œ ์ €์žฅ ๊ฐ€์ง : size ๋Š” root ํฌํ•จ ๋ชจ๋“  node ์˜ ์ˆ˜ : depth ๋Š” node ์—์„œ root ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ : height๋Š” ๋…ธ๋“œ ๊นŠ์ด์˜ ์ตœ๋Œ€๊ฐ’ ๐Ÿพbinary tree (์ด์ง„ ํŠธ๋ฆฌ) : ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” tree : ๊ฐ ๋…ธ๋“œ๊ฐ€ 0์—์„œ ์ตœ๋Œ€ 2๊ฐœ์˜ child ๋…ธ๋“œ ๊ฐ–๋Š”๋‹ค ๐Ÿพ binary search tree (์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ) : ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ๊ฐ’ < ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’ : ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’ < ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ํ•œ ํ•œ๋ฐœ์ง ๋‘๋ฐœ์ง๐Ÿพ] ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

=> ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด๋ณด์„ธ์š” (์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ๐Ÿซง ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ์›์†Œ๋“ค์„ ์–ด๋– ํ•œ ์กฐ๊ฑด ํ•˜์— ๊ณ„์‚ฐํ•  ๋•Œ ์‚ฌ์šฉ : ํ•˜๋‚˜์˜ ํŠน์ • ๋ฒ”์œ„๋ฅผ ์ •ํ•ด ๋†“๊ณ , ๊ทธ ์œˆ๋„์šฐ๋ฅผ ์ด๋™์‹œํ‚ค๋ฉด์„œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ์›์†Œ๋“ค์„ ๊ณ„์‚ฐํ•ด์คŒ : ์œˆ๋„์šฐ ๋ฒ”์œ„ ๋‚ด์˜ ๋ชจ๋“  ์ˆซ์ž๋“ค์€ ํ•ฉ์‚ฐํ•˜๊ณ , ๋ฒ”์œ„ ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚œ ์ˆซ์ž๋“ค์€ ๋นผ์ค€๋‹ค ๐Ÿพ ์‚ฌ์ด์ฆˆ๊ฐ€ k์ธ, ๋ถ€๋ถ„ ๋ฐฐ์—ด(subarrary) ์˜ ์ตœ๋Œ€ ํ•ฉ ๊ตฌํ•˜๊ธฐ function maxSumOfSubArrary(arr: number[], k:numnber) { let windowSum = 0; let maxSum = -Infinity; for (let i = 0; i = k - 1) { ma..

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ„ํ•œ ํ•œ๋ฐœ์ง ๋‘๋ฐœ์ง๐Ÿพ] ์ด์ง„ํƒ์ƒ‰

=> ๊ฐœ๋ฐœ์ž ํ•„์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ #3. ์ด์ง„ํƒ์ƒ‰ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๐Ÿซง ์ด์ง„ํƒ์ƒ‰ : ๋ถ„ํ•  ์ •๋ณต ํŒจํ„ด์„ ์ง€ํ–ฅํ•˜๋Š” ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ธํ’‹ ๋ฐฐ์—ด/๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์กฐ๊ฑดํ•˜์— ์ ์šฉ๋จ ๐Ÿซง ์ด์ง„ํƒ์ƒ‰ vs ์„ ํ˜•ํƒ์ƒ‰ ์ด์ง„ํƒ์ƒ‰ ์„ ํ˜•ํƒ์ƒ‰ worst : O(log n) ๋งคํšŒ ์ž๋ฃŒ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ ๊ฐ€๋ฉฐ ํƒ์ƒ‰ (์„ ํ˜•๋ณด๋‹ค ๋น ๋ฆ„) worst : O(n) ์ˆœ์ฐจ์ ์ธ ํƒ์ƒ‰ ํŒจํ„ด ์ธํ’‹ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋ถ„ํ•  ์ •๋ณต ์œ ํ˜• ์ž‘๊ฑฐ๋‚˜ ์ค‘๊ฐ„ ์‚ฌ์ด์ฆˆ์˜ ๋ฐ์ดํ„ฐ์…‹์— ์ ์ ˆ ๐Ÿซง ์ด์ง„ํƒ์ƒ‰ ์›๋ฆฌ 1) L, M, (์ค‘๊ฐ„ ์ง€์ ), R ํฌ์ธํŠธ ์ค€๋น„ 2) ๋ฐฐ์—ด์˜ M ์ˆ˜๊ฐ€ ์ฐพ๋Š” ์ˆซ์ž์™€ ๊ฐ™๋‹ค๋ฉด M ๋ฆฌํ„ด ์ถ”์ธก ์ˆซ์ž๊ฐ€ ์ฐพ๋Š” ์ˆซ์ž๋ณด๋‹ค ์ž‘๋‹ค๋ฉด L์„ M + 1 ์œ„์น˜๋กœ ์ด๋™ (์ขŒ์ธก ์ˆซ์ž๋“ค ํƒ์ƒ‰์—์„œ ์ œ์™ธ) ์ถ”์ธก ์ˆซ์ž๊ฐ€ ์ฐพ๋Š” ์ˆซ์ž๋ณด๋‹ค ํฌ๋‹ค๋ฉด R์„ M - 1 ์œ„์น˜๋กœ ์ด๋™ (์šฐ์ธก ์ˆซ์ž๋“ค ํƒ์ƒ‰์—์„œ ์ œ์™ธ) ..