Data Structure
Computer Science of Data Structure

Pointer

๐Ÿ‘‰ ์ž๋ฃŒํ˜•๊ณผ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜
๐Ÿ‘‹ int *ptr = &a;
๐Ÿ‘‰ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์•ž * ๋ถ™์ด๋ฉด ํ•ด๋‹น ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’์„ ์˜๋ฏธ
โœ‹ int a = 3; (๊ฐ€์ •) // cout ยซย *ptr ยซย endl; // 3 ์ถœ๋ ฅ
โœ‹ & : ์ฃผ์†Œ ์—ฐ์‚ฐ์ž (ampersand)
โœ‹ * : ์—ญ์ฐธ์กฐ์—ฐ์‚ฐ์ž (asterisk)


Call-by-Value ๐Ÿ†š Call-by-Reference โœ”๏ธ

๐Ÿ‘‹ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๋Š” ํ•ญ์ƒ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์‚ฌ๋ณธ์ด ์ „๋‹ฌ๋จ
๐Ÿ‘‰ Call-by-Value
ใ€€ใ€€๐Ÿ‘‰ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ ๊ฐ’(Value)์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ ๋ณต์‚ฌ ๋ฐฉ์‹, ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ฆ‰, ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ ์ฆ‰, ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ ์—ฐ์‚ฐ(๋น„์šฉ)์ด ๋ฐœ์ƒ O + ์›๋ณธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ X
๐Ÿ‘‰ Call-by-Reference
ใ€€ใ€€๐Ÿ‘‰ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ ๋ ˆํผ๋Ÿฐ์Šค(Reference, ์ฃผ์†Œ๊ฐ’)์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ ์ฐธ์กฐ ๋ฐฉ์‹, ๋‹จ์ˆœํžˆ ์ฃผ์†Œ ๊ฐ’์„ ํ†ตํ•ด ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ ์ฆ‰, ๋”ฐ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ ์—ฐ์‚ฐ(๋น„์šฉ)์ด ๋ฐœ์ƒํ•˜์ง€ X + ์›๋ณธ์— ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ๋จ
ใ€€ใ€€โœ‹ ์›๋ณธ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ง‰์„๋•Œ๋Š” const
ใ€€ใ€€๐Ÿ‘‹ 1. ํฌ์ธํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹ // add(&a, &b), void add(int *a, int *b)
ใ€€ใ€€๐Ÿ‘‹ 2. ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹ // add(a, b), void add(int &a, int &b)
๐Ÿ‘‹ Link
๐Ÿ‘‹ ์•„๋ž˜์˜ ์ƒ์„ฑ์ž, ์ƒ์†, virtual ์ฐธ๊ณ 


ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ด€์ ์„ ๊ฐ–๊ฒŒํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•จ
ใ€€ใ€€๐Ÿ‘‰ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ๋ฌด์—‡(What)์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ๋ณด๋‹ค ์–ด๋–ป๊ฒŒ(How) ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ โœ”๏ธ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๋ฉฐ, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šฐ๋ฏ€๋กœ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ But, ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฌ๋ฏ€๋กœ, ๊ฐ์ฒด๊ฐ€ ๋งŽ์œผ๋ฉด ์šฉ๋Ÿ‰์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์ˆœ์ฐจ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”์‹œ ๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ๋˜๋„๋ก ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์ปดํ“จํ„ฐ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜์—ฌ ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฆ„
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์–ด ๋น„ํšจ์œจ์ ์ด๋ฉฐ, ๋””๋ฒ„๊น… ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€
ใ€€ใ€€๐Ÿ‘‰ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์–ด๋–ป๊ฒŒ(How) ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ๋ณด๋‹ค ๋ฌด์—‡(What)์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์—†์• ๊ณ  ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ชจ๋“ˆํ™” ์ˆ˜์ค€์„ ๋†’์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฃธ์— ์žˆ์–ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ์— ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ž„
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ๋ถ€์ˆ˜ ํšจ๊ณผ : ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์‹คํ–‰์œผ๋กœ ์ธํ•ด ํ•จ์ˆ˜ ์™ธ๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์ˆœ์ˆ˜ ํ•จ์ˆ˜ : ์™ธ๋ถ€์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€๋„, ๋ฐ›์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜ (๋™์ผํ•œ ์ž…๋ ฅ โ†’ ํ•ญ์ƒ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜)
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ์–ด๋–ค ํ•จ์ˆ˜์— ๊ฐ™์€ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‰ ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์•„๋ฌด ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ๋ชจ๋“ˆ : ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์žฌํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฉ์–ด๋ฆฌ
ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ๋ชจ๋“ˆํ™” : ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ ํ˜น์€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๊ธฐ๋ฒ•


Template(C++)

๐Ÿ‘‰ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๊ฐ€ ์ œ๋„ค๋ฆญ ํ˜•๊ณผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ธฐ๋Šฅ
โœ‹ Templates are a feature of the C++ Programming language that allows functions and classes to operate with generic types
๐Ÿ‘‹ Link


๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 5๊ฐ€์ง€ ํ‚ค์›Œ๋“œ

๐Ÿ‘‰ ํด๋ž˜์Šค/๊ฐ์ฒด, ์ถ”์ƒํ™”, ๋‹คํ˜•์„ฑ, ์ƒ์†, ์บก์Šํ™”


Struct โœ”๏ธ

๐Ÿ‘‰ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…


Class โœ”๏ธ

๐Ÿ‘‰ ์–ด๋– ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ ํ‹€


Struct ๐Ÿ†š Class

๐Ÿ‘‰ ๊ณตํ†ต์  : ๊ตฌ์กฐ์ฒด ์ด๋ฆ„์„ ์„ ์–ธํ•˜๊ณ  dot(.) ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๊ฐ’ ๋˜๋Š” ํ•จ์ˆ˜์— ์ ‘๊ทผํ•œ๋‹ค๋Š” ๊ฒƒ
๐Ÿ‘‰ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‰ Struct๋Š” ๊ฐ’ ํƒ€์ž…, ๋ณต์‚ฌ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ Struct์˜ ์ธ์Šคํ„ด์Šค๋Š” ์Šคํƒ์— ์ €์žฅ
ใ€€ใ€€๐Ÿ‘‰ Class๋Š” ์ฐธ์กฐ ํƒ€์ž…, ์ฐธ์กฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ Class์˜ ์ธ์Šคํ„ด์Šค๋Š” ํž™์— ์ €์žฅ๋˜๋ฉฐ, ๊ทธ ํž™์˜ ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ ๊ฐ’์ด stack์— ์ €์žฅ๋จ
๐Ÿ‘‰ ๋˜ํ•œ, ์ ‘๊ทผ์ œ์–ด ์ง€์‹œ์ž์˜ default ๊ฐ’์ด ๋‹ค๋ฆ„
ใ€€ใ€€๐Ÿ‘‹ Struct : public, Class : private
ใ€€ใ€€๐Ÿ‘‰ ์ ‘๊ทผ ์ œ์–ด ์ง€์‹œ์ž : ๊ฐ์ฒด ๋‚ด์˜ ๋ฐ์ดํ„ฐ ๋ฐ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• 
ใ€€ใ€€๐Ÿ‘‹ public, private, protected // ๋ชจ๋“  ์ ‘๊ทผ ํ—ˆ์šฉ, ์™ธ๋ถ€ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ, ์ƒ์† ํด๋ž˜์Šค ์ ‘๊ทผ ๊ฐ€๋Šฅ


Object ๐Ÿ†š Instance โœ”๏ธ

๐Ÿ‘‹ An Object is an Instance of a Class
โœ‹ a = Cookie() // a ๊ฐ์ฒด๋Š” Cookie ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค
๐Ÿ‘‰ Object
ใ€€ใ€€๐Ÿ‘‰ ์†Œํ”„ํŠธ์›จ์–ด ์„ธ๊ณ„์— ๊ตฌํ˜„ํ•  ๋Œ€์ƒ
ใ€€ใ€€โœ‹ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์„ ๋•Œ
๐Ÿ‘‰ Instance
ใ€€ใ€€๐Ÿ‘‰ ์†Œํ”„ํŠธ์›จ์–ด ์„ธ๊ณ„์— ๊ตฌํ˜„๋œ ์‹ค์ฒด
ใ€€ใ€€โœ‹ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์‹ค์ œ ์‚ฌ์šฉ๋  ๋•Œ


๋ฐ์ดํ„ฐ ์ถ”์ƒํ™”(Data Abstraction) โœ”๏ธ

๐Ÿ‘‰ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ๋ฐ์ดํ„ฐ์ ์ธ ์ธก๋ฉด๊ณผ ๊ธฐ๋Šฅ์ ์ธ ์ธก๋ฉด์œผ๋กœ ๋ชจ๋ธ๋งํ•˜์—ฌ ์‹œ์Šคํ…œ ๋‚ด์˜ ์‚ฌ๋ฌผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ


๋‹คํ˜•์„ฑ(Polymorphism) โœ”๏ธ

๐Ÿ‘‰ ๋ณด์ด๋Š” ๋ชจ์Šต์€ ํ•˜๋‚˜์ด์ง€๋งŒ ์‹ค์งˆ์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋กœ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ
โœ‹ Polymorphism is the provision of a single interface to entities of different types or the use of a single symbol to represent multiple different types
๐Ÿ‘‹ ๊ฐ์ฒด๋ฅผ ์žฌํ™œ์šฉํ•˜๊ธฐ ์‰ฌ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ด
๐Ÿ‘‹ Overloading, Overriding


์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) โœ”๏ธ

๐Ÿ‘‰ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ์ค‘๋ณตํ•ด์„œ ์ •์˜ํ•˜๋Š” ๊ฒƒ
๐Ÿ‘‹ ๋‹จ, ๋ฐ˜๋“œ์‹œ ์ธ์ž ๊ฐœ์ˆ˜ ํ˜น์€ ํƒ€์ž…์ด ๋‹ฌ๋ผ์•ผ ํ•จ
๐Ÿ‘‹ ๊ฐ€๋Šฅํ•œ ์ด์œ  : ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •๋ณด๊นŒ์ง€ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ
๐Ÿ‘‹ return ํƒ€์ž…๋งŒ ๋‹ค๋ฅผ ๊ฒฝ์šฐ๋Š” error


์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) โœ”๏ธ

๐Ÿ‘‰ ์ƒ์† ๋ฐ›์•˜์„ ๋•Œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ


Overloading ๐Ÿ†š Overriding

๐Ÿ‘‹ Overloading : ๋Œ€์ƒ์ด ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ง€์ •, ์ •์  ๋ฐ”์ธ๋”ฉ ๊ฐœ๋…
๐Ÿ‘‹ Overriding : ๋Œ€์ƒ์ด ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋Ÿฐ ํƒ€์ž„์— ์ง€์ •, ์ •์ /๋™์  ๋ฐ”์ธ๋”ฉ ๊ฐœ๋…
๐Ÿ‘‹ ex) code

class Car
{
        void hi() { cout << "hi Car!"; }
        // virtual void hi() { cout << "hi Car!"; }
};

class Suv : Car
{
        void hi() { cout << "hi Suv!"; } // Overriding
};

class Bt : Suv
{
        void hi() { cout << "hi Bt!"; } // Overriding
};

void hello(Car c) { cout << "hello Car!"; } // Overloading
void hello(Suv s) { cout << "hello Suv!"; } // Overloading

int main()
{
        Car c = Car();
        Suv s = Suv();

        hello(c); // hello Car! 
        hello(s); // hello Suv!

        Car suv = Suv();
        
        hello(suv); // hello Car!
        // ์ปดํŒŒ์ผ ์‹œ์ ์— ์ง€์ •๋˜๋ฏ€๋กœ
        // ์ด ์‹œ์ ์— Car suv์— ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ๋“ค์–ด ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•จ

        suv.hi(); // hi Car!
        // ์ •์  ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•ด hi Car!๊ฐ€ ์ถœ๋ ฅ
        // virtual ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ (hi Suv! X)

        Car* mysuv;
        
        mysuv = &s;
        mysuv->hi(); // hi Car!
        // ์ •์  ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•ด hi Car!๊ฐ€ ์ถœ๋ ฅ
        // virtual ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด ๋™์  ๋ฐ”์ธ๋”ฉ๋œ ๊ฒฐ๊ณผ์ธ hi Suv! ์ถœ๋ ฅ
        // ์ •ํ™•ํ•˜๊ฒŒ๋Š”, virtual ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ์‹œ์ ์— ์•Œ ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ
        // ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์—์„œ ๊ฒฐ์ •ํ•˜๊ฒŒ๋” ๋ฏธ๋ฃจ๋Š” ๋™์ž‘ ๋ฐฉ์‹ 
        //...
}

๐Ÿ‘‹ Link
๐Ÿ‘‹ Link


๋™์  ๋ฐ”์ธ๋”ฉ โœ”๏ธ

๐Ÿ‘‰ ๋Ÿฐ ํƒ€์ž„์— ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฐ”์ธ๋”ฉ
ใ€€ใ€€๐Ÿ‘‰ ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์•Œ ์ˆ˜ ์—†์–ด๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋žจ์˜ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฐ–์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋‚˜, ์‹คํ–‰ ์‹œ์ ์— ๋™์  ๋ฐ”์ธ๋”ฉ์ด ์ผ์–ด๋‚˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์— ์ ‘๊ทผํ•˜์—ฌ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œย 


์ƒ์†(Inheritance) โœ”๏ธ

๐Ÿ‘‰ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋กœ ๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์ธ ํŠน์„ฑ(๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜)์„ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
โœ‹ Inheritance is when an object or class is based on another object or class, using the same implementation
โœ‹ Inheritance in most class-based object oriented languages is a mechanism in which one object acquires all the properties and behaviors of parent object


์บก์Šํ™”(Encapsulation) โœ”๏ธ

๐Ÿ‘‰ ๊ด€๋ จ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ
ใ€€ใ€€๐Ÿ‘‹ ์ฝ”๋“œ๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ
๐Ÿ‘‰ ๋˜ํ•œ, ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์™ธ๋ถ€์— ๊ฐ์ถ”๋Š” ๊ฒƒ
ใ€€ใ€€๐Ÿ‘‹ ์ฆ‰, ์ •๋ณด ์€๋‹‰์˜ ์˜๋ฏธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ


์ •๋ณด ์€๋‹‰(Information hiding) โœ”๏ธ

๐Ÿ‘‰ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ณ  ์ž์‹ ์˜ ์—ฐ์‚ฐ ๋งŒ์„ ํ†ตํ•ด ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ


์ ‘๊ทผ ์ œํ•œ์ž getter, setter ์“ฐ๋Š” ์ด์œ 

๐Ÿ‘‰ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ์ฒด ์•ˆ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ž˜๋ชป ์กฐ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์คŒ
โœ‹ getter, setter๋Š” ์ •๋ณด ์€๋‹‰์ด๋ผ๋Š” ํŠน์„ฑ์„ ์ž˜ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Œ


OOP์˜ 5๋Œ€ ์›์น™

๐Ÿ‘‰ SOLID
ใ€€ใ€€๐Ÿ‘‰ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility Principle) : ๊ฐ์ฒด๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•จ
ใ€€ใ€€ใ€€ใ€€โœ‹ ๋‹จ์ผ ๋ชจ๋“ˆ ๋ณ€๊ฒฝ์˜ ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜๋ฟ์ด์–ด์•ผ ํ•จ ; ์‰ฌ์šด ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•˜์—ฌ
ใ€€ใ€€๐Ÿ‘‰ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(Open Closed Principle) : ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด์•ผ ํ•จ
ใ€€ใ€€๐Ÿ‘‰ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(Liskov Substitution Principle) : ์ž์‹ ํด๋ž˜์Šค๋Š” ์ตœ์†Œํ•œ ์ž์‹ ์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ฐ€๋Šฅํ•œ ํ–‰์œ„๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
ใ€€ใ€€๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(Interface Segregation Principle) : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ํŠนํ™”๋˜๋„๋ก ๋ถ„๋ฆฌ์‹œํ‚ค๋ผ๋Š” ์„ค๊ณ„ ์›์น™
ใ€€ใ€€๐Ÿ‘‰ ์˜์กด ์—ญ์ „ ์›์น™(Dependency Inversion Principle) : ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ๋ณ€ํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ, ๊ฑฐ์˜ ๋ณ€ํ™”๊ฐ€ ์—†๋Š” ๊ฒƒ์— ์˜์กดํ•˜๋ผ๋Š” ๊ฒƒ


Build

๐Ÿ‘‰ ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฐ์ถœ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •
๐Ÿ‘‹ ์œ„์˜ 4๊ฐ€์ง€ ๊ณผ์ •(P โžก๏ธ C โžก๏ธ A โžก๏ธ L)์„ ๊ฑฐ์นจ
โœ‹ ์ปดํŒŒ์ผ์€ ๋นŒ๋“œ ๊ณผ์ •์˜ ์ผ๋ถ€


Preprocessor

๐Ÿ‘‰ ์ „์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ๋ฌธ(#์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ตฌ๋ฌธ)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ•  // .cpp โžก๏ธ .i
โœ‹ A Preprocessor is a program that processes its input data to produce output that is used as input to another program


Compiler

๐Ÿ‘‰ ๊ณ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ•  // .i โžก๏ธ .s
โœ‹ A Compiler is a computer program that translates computer code written in one programming language into another language


Assembler

๐Ÿ‘‰ ์™„์ „ํžˆ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ•  // .s โžก๏ธ .o
โœ‹ An Assembler program creates object code by translating combinations of mnemonics and syntax for operations and addressing modes into their numerical equivalents


Linker

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋“ค์„ ํ•ฉ์ณ์ฃผ๋Š” ์—ญํ•  // .o โžก๏ธ .exe
๐Ÿ‘‹ Linker is a computer program that takes one or more object files generated by a compiler and combines them into a single executable file, etc


Compile โœ”๏ธ

๐Ÿ‘‰ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ๊ณผ์ •


Interpreter

๐Ÿ‘‰ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์ฝ์–ด ๋‚ด๋ ค๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ


Compile Error

๐Ÿ‘‰ ์ปดํŒŒ์ผ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ, ์ฃผ๋กœ syntax ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ


Runtime Error

๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ, ์ฃผ๋กœ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ
๐Ÿ‘‹ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜ ; Divide by Zero, Infinite Loop, Out of Bounds ๋“ฑ


๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ โœ”๏ธ

๐Ÿ‘‰ Code
ใ€€ใ€€๐Ÿ‘‰ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํ…์ŠคํŠธ ์˜์—ญ
ใ€€ใ€€โœ‹ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
ใ€€ใ€€๐Ÿ‘‹ ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ์ด ์ด๊ณณ์— ์ง€์ •๋จ
๐Ÿ‘‰ Data
ใ€€ใ€€๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ํ• ๋‹น๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ์†Œ๋ฉธ๋˜๋Š” ์˜์—ญ
ใ€€ใ€€๐Ÿ‘‹ ์ „์—ญ๋ณ€์ˆ˜์™€ static ๋ณ€์ˆ˜๊ฐ€ ์ด๊ณณ์— ํ• ๋‹น
๐Ÿ‘‰ Heap
ใ€€ใ€€๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹น/ํ•ด์ œํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
ใ€€ใ€€๐Ÿ‘‰ ๋Ÿฐ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ
ใ€€ใ€€๐Ÿ‘‹ ์ด ๊ณต๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋™์  ํ• ๋‹น์ด๋ผ๊ณ  ํ•จ
๐Ÿ‘‰ Stack
ใ€€ใ€€๐Ÿ‘‰ ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
ใ€€ใ€€๐Ÿ‘‰ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ
ใ€€ใ€€๐Ÿ‘‹ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ด๊ณณ์— ์ €์žฅ๋จ
ใ€€ใ€€๐Ÿ‘‹ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง

โš ๏ธ Heap๊ณผ Stack์€ ๊ฐ™์€ ๊ณต๊ฐ„์„ ๊ณต์œ 
โš ๏ธ Heap์€ ๋‚ฎ์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ๋†’์€ ์ฃผ์†Œ๋กœ ํ• ๋‹น๋˜๋ฉฐ, Stack์€ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ํ• ๋‹น๋˜๋Š” ๋ฐฉ์‹
โš ๏ธ ๊ฐ ์˜์—ญ์ด ์ƒ๋Œ€ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
โš ๏ธ ์ด๋ฅผ, Heap Overflow, Stack Overflow
โš ๏ธ Stack ์˜์—ญ์ด ํฌ๋ฉด ํด์ˆ˜๋ก Heap ์˜์—ญ์ด ์ž‘์•„์ง€๊ณ , ๋ฐ˜๋Œ€๋„ ๋™์ผํ•จ
๐Ÿ‘‹ Overflow : ์šฉ๋Ÿ‰์ด ๋„˜์ณ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ


Stack ๐Ÿ†š Heap โœ”๏ธ

๐Ÿ‘‰ Stack
ใ€€ใ€€๐Ÿ‘‰ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
ใ€€ใ€€๐Ÿ‘‰ ๋”ฐ๋ผ์„œ, ์Šคํƒ ํ• ๋‹น์€ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Œ
ใ€€ใ€€๐Ÿ‘‹ ์ฆ‰, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ
ใ€€ใ€€๐Ÿ‘‰ But, ํž™์€ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ์ ์ ˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„์— ํ• ๋‹น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์ ์ธ ๊ตฌ์กฐ
ใ€€ใ€€๐Ÿ‘‰ ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์Šคํƒ๋ณด๋‹ค ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ(Overhead)๊ฐ€ ๋ฐœ์ƒ
ใ€€ใ€€๐Ÿ‘‰ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ข‹์€ ์„ฑ๋Šฅ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋˜๋„๋ก ๊ฐ’ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
ใ€€ใ€€๐Ÿ‘‹ ์Šคํƒ์— ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ์–ด ํ•œ๊ณ„๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ 
๐Ÿ‘‰ Heap
ใ€€ใ€€๐Ÿ‘‹ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๊ฐœ์ฒด์˜ ๊ฐœ์ˆ˜๋‚˜ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ 
ใ€€ใ€€๐Ÿ‘‹ ํ• ๋‹น ํ›„ ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด Memory Leak ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋‹จ์ 


static ๋ณ€์ˆ˜

๐Ÿ‘‰ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•˜๊ณ ์ž ํ•  ๋•Œ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜
๐Ÿ‘‰ compile ํƒ€์ž„์— ์ฃผ์†Œ ๋ฐ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •
โœ‹ ์ด ๋ณ€์ˆ˜๋Š” ๊ฐ๊ฐ์˜ ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด X
โœ‹ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋˜๋Š” ๊ฐœ๋…


Bubble Sort

๐Ÿ‘‰ O(n^2)
๐Ÿ‘‰ stable sort
๐Ÿ‘‰ in-place sort
โœ‹ 13 7 9 3 โžก๏ธ 7 13 9 3 โžก๏ธ 7 9 13 3 โžก๏ธ 7 9 3 13
โœ‹ 7 9 3 13 โžก๏ธ 7 3 9 13 โžก๏ธ 3 7 9 13 โžก๏ธ 3 7 9 13
โœ‹ 2๊ฐœ์”ฉ ์ง€์ •, swap
๐Ÿ‘‹ code

void bubblesort()
{
	for (int i = n - 1; i > 0; i--)
	{
		for (int j = 0; j < i; j++)
                {
                        if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]);
                }
	}
}


Insertion Sort

๐Ÿ‘‰ O(n^2) // Best์ผ ๊ฒฝ์šฐ O(n)
๐Ÿ‘‰ stable sort
๐Ÿ‘‰ in-place sort
๐Ÿ‘‹ ๊ฑฐ์˜ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ๋น ๋ฆ„
๐Ÿ‘‹ ๋น„๊ต ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ™•์—ฐํžˆ ์ž‘์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—
โœ‹ 13 7 9 3 โžก๏ธ 13 7 9 3 โžก๏ธ 7 13 9 3
โœ‹ 7 13 9 3 โžก๏ธ 7 9 13 3 โžก๏ธ 7 9 13 3 โžก๏ธ 3 7 9 13
โœ‹ ํ•œ ๊ณณ ๊ธฐ์ค€ ์ •๋ ฌ, ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ์œ„์น˜์— insert

void insertionsort()
{
	for (int i = 1; i < n; i++)
	{
                int key = arr[i];
                int j;

		for (j = i - 1; j >= 0; j--)
                {
                        if (arr[j] > key) arr[j + 1] = key;
                        else break;
                }

                arr[j + 1] = key;
	}
}


Selection Sort

๐Ÿ‘‰ O(n^2)
๐Ÿ‘‰ unstable sort // 2 2 1 3
๐Ÿ‘‰ in-place sort
โœ‹ 13 9 7 3 โžก๏ธ 13 9 7 3 โžก๏ธ 13 9 7 3
โœ‹ 3 9 7 13 โžก๏ธ 3 9 7 13 โžก๏ธ 3 7 9 13
โœ‹ ํ•˜๋‚˜ ๊ธฐ์ค€, ์ œ์™ธ min/max ์ฐพ์€ ํ›„ swap

void selectionsort()
{
	for (int i = 0; i < n - 1; i++)
	{
                int minidx = i;

		for (int j = i + 1; j < n; j++)
                {
                        if (arr[j] < arr[minidx]) minidx = j;
                }

                swap(arr[i], arr[minidx]);
	}
}


Merge Sort

๐Ÿ‘‰ O(nlogn)
๐Ÿ‘‰ stable sort
๐Ÿ‘‰ not in-place sort
โœ‹ 7 2 9 4 โžก๏ธ 7 2 | 9 4 โžก๏ธ 7 | 2 | 9 4
โœ‹ 2 7 | 9 4 โžก๏ธ 2 7 | 9 4 โžก๏ธ 2 7 | 9 | 4
โœ‹ 2 7 | 4 9 โžก๏ธ 2 4 7 9
โœ‹ ๋จผ์ € ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ํ›„์— ๋ณ‘ํ•ฉ
โœ‹ ๋ณ‘ํ•ฉ ์‹œ ๋น„๊ตํ•˜๋ฉฐ ์ˆœ์„œ์— ๋งž๊ฒŒ & temp ๋ฐฐ์—ด์ด ํ•„์š”(not in-place)

void merge(int l, int m, int r)
{
        int i = l;
        int j = m + 1;

        int k = l;

        while (i <= m && j <= r)
        {
                if (arr[i] <= arr[j])
                {
                        temp[k] = arr[i];
                        i++;
                }
                else
                {
                        temp[k] = arr[j];
                        j++;
                }

                k++;
        }

        while (i <= m)
        {
                temp[k] = arr[i];
                i++;
                k++;
        }

        while (j <= r)
        {
                temp[k] = arr[j];
                j++;
                k++;
        }

        for (int x = l; x <= r; x++)
        {
                arr[x] = temp[x];
        }
}

void mergesort(int l, int r)
{
	if (l < r)
        {
                int mid = (l + r) / 2;

                mergesort(l, mid);
                mergesort(mid + 1, r);

                merge(l, mid, r);
        }
}


Quick Sort

๐Ÿ‘‰ O(nlogn) // Worst์ผ ๊ฒฝ์šฐ O(n^2)
๐Ÿ‘‰ unstable sort
๐Ÿ‘‰ in-place sort
โœ‹ 3 7 8 1 5 9 6 10 2 4
โœ‹ 3 โ€˜7โ€™ 8 1 5 9 6 10 2 โ€œ4โ€
โœ‹ 3 โ€˜7โ€™ 8 1 5 9 6 10 โ€œ2โ€ 4
โœ‹ 3 โ€˜2โ€™ 8 1 5 9 6 10 โ€œ7โ€ 4
โœ‹ 3 2 โ€˜8โ€™ 1 5 9 6 10 โ€œ7โ€ 4
โœ‹ 3 2 โ€˜8โ€™ โ€œ1โ€ 5 9 6 10 7 4
โœ‹ 3 2 โ€˜1โ€™ โ€œ8โ€ 5 9 6 10 7 4
โœ‹ 3 2 โ€œ1โ€ โ€˜8โ€™ 5 9 6 10 7 4
โœ‹ 1 2 โ€œ3โ€ โ€˜8โ€™ 5 9 6 10 7 4
โœ‹ 1 โ€œโ€˜2โ€™โ€ | 3 | 8 โ€˜5โ€™ 9 6 10 7 โ€œ4โ€
โœ‹ โ€ฆ
โœ‹ 3๊ฐœ์˜ ํฌ์ธํ„ฐ(p, l, r), l > r ๋˜๋Š” ์ˆœ๊ฐ„ swap(p, r)

void quicksort(int start, int end)
{
	if (start >= end) return;

        int key = start;
        int l = start + 1;
        int r = end;

        while (l <= r)
        {
                while (arr[l] <= arr[key] && l <= end)
                {
                        l++;
                }

                while (arr[r] >= arr[key] && r > start)
                {
                        r--;
                }

                if (l > r) swap(arr[key], arr[r]);
                else swap(arr[l], arr[r]);
        }

        quicksort(start, r - 1);
        quicksort(r + 1, end);
}


Heap Sort

๐Ÿ‘‰ O(nlogn)
๐Ÿ‘‰ unstable sort
๐Ÿ‘‰ in-place sort
โœ‹ 3 7 8 1 5 9 6 10 2 4 โžก๏ธ 1 2 6 3 4 9 8 10 7 5
โœ‹ 1 2 6 3 4 9 8 10 7 5 โžก๏ธ 5 2 6 3 4 9 8 10 7 1
โœ‹ 5 2 6 3 4 9 8 10 7 | 1 โžก๏ธ 2 3 6 5 4 9 8 10 7 | 1
โœ‹ 2 3 6 5 4 9 8 10 7 | 1 โžก๏ธ 7 3 6 5 4 9 8 10 2 | 1
โœ‹ 7 3 6 5 4 9 8 10 | 2 1 โžก๏ธ โ€ฆ
โœ‹ index ์ˆœ์œผ๋กœ parent์™€ ๋น„๊ต ํ›„ swap โžก๏ธ heapify
โœ‹ heapify ํ›„ root์™€ end_index swap, end_index - 1๊นŒ์ง€ ๋‹ค์‹œ heapify
โœ‹ priority_queue์˜ ์›๋ฆฌ

void heapify(int num)
{
        for (int i = 2; i <= num; i++)
        {
                int idx = i;
                int p_idx = i / 2;
                
                while (p_idx >= 1)
                {
                        if (arr[idx] > arr[p_idx])
                        {
                                swap(arr[idx], arr[p_idx]);
                                idx /= 2;
                                p_idx /= 2;
                        }
                        else break;
                }
        }
}

void heapsort()
{
	heapify(n);

        for (int i = n; i >= 2; i--)
        {
                swap(arr[1], arr[i]);

                heapify(i - 1);
        }
}


Shell Sort ๐Ÿ”ฅ

๐Ÿ‘‰ O(n) ~ O(n^2) // Avg O(n^1.5)
๐Ÿ‘‰ stable sort
๐Ÿ‘‰ in-place sort
๐Ÿ‘‹ ์‚ฝ์ž… ์ •๋ ฌ์„ ๋ณด์™„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ‘‹ ์‚ฝ์ž… ์ •๋ ฌ์€ ์š”์†Œ๋“ค์ด ์‚ฝ์ž…๋  ๋•Œ, ์ด์›ƒํ•œ ์œ„์น˜๋กœ ์ด๋™ // ์‚ฝ์ž… ์ •๋ ฌ์˜ ์ตœ๋Œ€ ๋ฌธ์ œ์ 
๐Ÿ‘‹ ๋”ฐ๋ผ์„œ, ๊ฑฐ์˜ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋น ๋ฆ„
๐Ÿ‘‹ code

void shellsort(int p[], int n)
{
	int s, j = 0;

	for (int h = 1; h < n; h = 3 * h + 1)
	{
		s = h; // find h maxsize
	}

	for (int h = s; h > 0; h = h / 3) // h decrease, h๋Š” size ๊ฐœ๋…
	{
		for (int i = h + 1; i <= n; i++)
		{
			int v = p[i]; // ํ•˜๋‚˜ ๊ธฐ์ค€
			j = i;

			while (j > h && p[j - h] > v) // ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๊ฒƒ์ด h์นธ ์•ž์— ์žˆ๋‹ค๋ฉด
			{
				p[j] = p[j - h]; // swap
				j = j - h; // h์นธ ์•ž์œผ๋กœ
			}

			p[j] = v; // v go to p[j]
		}
	}
}


Counting Sort(๊ณ„์ˆ˜ ์ •๋ ฌ) ๐Ÿ”ฅ

๐Ÿ‘‰ O(n+k) // k : ์ •๋ ฌ ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’
๐Ÿ‘‰ stable sort
๐Ÿ‘‰ not in-place sort
๐Ÿ‘‹ ๋ˆ„์  ํ•ฉ technic์„ ์ด์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
โœ‹ ์ •๋ ฌํ•˜๋Š” ์ˆซ์ž๊ฐ€ ํŠน์ •ํ•œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์„ ๋•Œ ๊ฝค ์œ ์šฉํ•œ sort
โœ‹ k๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ๋น„ํšจ์œจ์ 
โœ‹ ๋˜ํ•œ, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•  ์ˆ˜ ์žˆ์Œ
โœ‹ code (pseudo)

void countingsort(A, B, C, min, max)
{
        for (i = min; i <= max; i++) C[i] = 0; // ์ดˆ๊ธฐํ™”

        for (i = 0; i < A.size; i++) C[A[i]]++; // ex) ํ•ด๋‹น ์ ์ˆ˜ ๊ฐœ์ˆ˜ + 1

        for (i = min + 1; i <= max; i++) C[i] += C[i - 1]; // ๋ˆ„์ ํ•ฉ
        
        for (i = A.size - 1; i >= 0; i++) // ex) A ์—ญ์ˆœ์œผ๋กœ ๋งž๋Š” ์ž๋ฆฌ ์ฐพ์•„ B์— ํ• ๋‹น & ํ•ด๋‹น ์ ์ˆ˜ ๊ฐœ์ˆ˜ - 1
        {
                 B[C[A[i]]] = A[i];
                 C[A[i]]--;
        }
}


Radix Sort(๊ธฐ์ˆ˜ ์ •๋ ฌ) ๐Ÿ”ฅ

๐Ÿ‘‰ O(d(n+k))
๐Ÿ‘‰ must be stable
๐Ÿ‘‰ not in-place sort
โœ‹ k๋Š” 10 (0-9) or 26 (a-z) โ€ฆ
โœ‹ code

void Radix_Sort()
{
        int Radix = 1;
    
        while (true) // d ๊ณ„์‚ฐ (์ตœ๋Œ€ ์ž๋ฆฌ์ˆ˜)
        {
                if (Radix >= Max_Value) break; // Max_Value๋Š” ๋ฐฐ์—ด ์ค‘ ์ตœ๋Œ€๊ฐ’
                Radix = Radix * 10;
        }

        for (int i = 1; i < Radix; i = i * 10) // 1์˜ ์ž๋ฆฌ๋ถ€ํ„ฐ 10์”ฉ ๊ณฑํ•˜๋ฉด์„œ ์ตœ๋Œ€์ž๋ฆฟ์ˆ˜ ๊นŒ์ง€ ๋ฐ˜๋ณต
        {
                for (int j = 0; j < MAX; j++) // ๋ชจ๋“  ๋ฐฐ์—ด ํƒ์ƒ‰
                {
                        int K;
                        if (Arr[j] < i) K = 0; // ๋งŒ์•ฝ ํ˜„์žฌ ๋ฐฐ์—ด ๊ฐ’ ํ•ด๋‹น ์ž๋ฆฟ์ˆ˜๋ณด๋‹ค ์ž‘์œผ๋ฉด 0
                        else K = (Arr[j] / i) % 10; // ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฐ์—ด ๊ธฐ์ˆ˜ ์‚ฝ์ž…
                        Q[K].push(Arr[j]); // Queue์— ์ˆœ์ฐจ ์ €์žฅ
                }

                int Idx = 0;
                
                for (int j = 0; j < 10; j++) // Queue์— ์ €์žฅ๋œ ๊ฐ’๋“ค ์ˆœ์ฐจ์ ์œผ๋กœ ๋นผ๋‚ด๊ธฐ
                {
                        while (Q[j].empty() == 0) // ํ•ด๋‹น Index๋ฒˆํ˜ธ์˜ Queue๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
                        {
                                Arr[Idx] = Q[j].front(); // ํ•˜๋‚˜์”ฉ ๋นผ๋ฉฐ ๋ฐฐ์—ด์— ๋‹ค์‹œ ์ €์žฅ
                                Q[j].pop();
                                Idx++;
                        }
                }
        }
}


์™œ Heap Sort ๋Œ€์‹  Quick Sort๋ฅผ ์‚ฌ์šฉ?

๐Ÿ‘‹ Big-O notation์€ ๋Œ€๋žต์ ์ธ ์ธก์ • ๋ฐฉ๋ฒ•
๐Ÿ‘‰ ํ‰๊ท ์ ์œผ๋กœ ์„ฑ๋Šฅ์  ์ธก๋ฉด์—์„œ Quick์ด ๋” ์šฐ์ˆ˜
๐Ÿ‘‹ Heapify, n์ด ํฌ๋ฉด ํด์ˆ˜๋ก ์ด ๊ณผ์ •์ด ๊ฝค ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ์— Quick์ด ์šฐ์ˆ˜
๐Ÿ‘‹ Big-O natation : ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ๋Œ€๋žต์ ์œผ๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•


์™œ Merge Sort ๋Œ€์‹  Quick Sort๋ฅผ ์‚ฌ์šฉ?

๐Ÿ‘‹ Big-O notation์€ ๋Œ€๋žต์ ์ธ ์ธก์ • ๋ฐฉ๋ฒ•
๐Ÿ‘‰ ํ‰๊ท ์ ์œผ๋กœ ์„ฑ๋Šฅ์  ์ธก๋ฉด์—์„œ Quick์ด ๋” ์šฐ์ˆ˜
๐Ÿ‘‹ not in-place, ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉ ๊ณผ์ •์ด ๊ฝค ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ์— Quick์ด ์šฐ์ˆ˜


์™œ C++ sort๋Š” Quick? ์„ฑ๋Šฅ์ด ๋‚ฎ์ง€ ์•Š์„๊นŒ?

๐Ÿ‘‰ ์ •๋ ฌ์€ ์˜ค๋ž˜ ์ „๋ถ€ํ„ฐ ์—ฐ๊ตฌ๋˜์—ˆ๋˜ ๋ถ„์•ผ์ด๊ธฐ์— ๋งค์šฐ ๊ฐœ์„ ๋œ Quick Sort๊ฐ€ C++ sort()๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์Œ
โœ‹ Median-of-Three, random pivot, Insertion Sort์™€์˜ ์‘์šฉ(์ผ๋ฐ˜์  size ๊ธฐ์ค€ 200, ์ž‘์œผ๋ฉด Insert ํฌ๋ฉด Quick) ๋“ฑ


Binary Search โœ”๏ธ

๐Ÿ‘‰ O(logn)
๐Ÿ‘‰ ์™„์ „ ํƒ์ƒ‰์— ๋น„ํ•ด ์••๋„์ ์œผ๋กœ ๋น ๋ฆ„
๐Ÿ‘‹ left, right๋กœ mid๋ฅผ ์„ค์ •
๐Ÿ‘‹ mid์™€ ํƒ์ƒ‰ํ–ˆ๋˜ key ๊ฐ’๊ณผ ๋น„๊ต
๐Ÿ‘‹ key ๊ฐ’์ด mid๋ณด๋‹ค ํฌ๋‹ค๋ฉด, left = mid + 1
๐Ÿ‘‹ key ๊ฐ’์ด mid๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด, right = mid - 1
๐Ÿ‘‹ key ๊ฐ’์ด mid์™€ ๊ฐ™๋‹ค๋ฉด, ํƒ์ƒ‰ ์™„๋ฃŒ
โœ‹ sort๊ฐ€ ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•จ
โœ‹ linear search ํ‰๊ท  ๋น„๊ต ํšŸ์ˆ˜ : (n + 1) / 2
โœ‹ linear search ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)


Bitmasking

๐Ÿ‘‰ 0๊ณผ 1๋กœ flag๋ฅผ ํ™œ์šฉํ•˜๋Š” technic
๐Ÿ‘‰ ์ง‘ํ•ฉ์˜ ์š”์†Œ๋“ค์˜ ๊ตฌ์„ฑ ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์œ ์šฉํ•œ technic
๐Ÿ‘‹ ๋ณดํ†ต AND, OR, XOR, NOT, ยซ(LS),ย ยป(RS) ์—ฐ์‚ฐ์ž์™€ ์ž์ฃผ ์“ฐ์ž„
โœ‹ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋น ๋ฅธ ์ˆ˜ํ–‰์‹œ๊ฐ„์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅ
โœ‹ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์†Œ์˜ ์ˆ˜๊ฐ€ ์ž‘์„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
โœ‹ 0๋ฒˆ, 3๋ฒˆ, 5๋ฒˆ visit / else not visit
โœ‹ 101001(2) โžก๏ธ 41(10)์„ ํ™œ์šฉ


Dijkstra Algorithm โœ”๏ธ

๐Ÿ‘‰ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ‘‰ ํ•˜๋‚˜์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ๋•Œ ๊ทธ ์ด์ „๊นŒ์ง€ ๊ตฌํ–ˆ๋˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ์ด์šฉ
๐Ÿ‘‹ Priority Queue๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ
๐Ÿ‘‹ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ์ž‘์ ์—์„œ ๋ชฉ์ ์ง€๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ž„
๐Ÿ‘‹ ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ํฌํ•จ๋˜๋ฉด X


์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST, Minimum Spanning Tree)

๐Ÿ‘‰ ์ตœ์†Œ ๋น„์šฉ์˜ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ
๐Ÿ‘‹ Kruskal, Prim


Kruskal Algorithm

๐Ÿ‘‰ ์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ‘‰ ๊ฐ„์„  ์šฐ์„  ๋ฐ cycle ๋ฐฉ์ง€์˜ ํŠน์ง•์ด ์žˆ์Œ
๐Ÿ‘‹ Union-Find(Disjoint-Set)์„ ์ด์šฉํ•˜์—ฌ cycle์„ ๊ฒ€์‚ฌํ•จ


Prim Algorithm

๐Ÿ‘‰ ์ตœ์†Œ ๋น„์šฉ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
๐Ÿ‘‰ ์ž„์˜ ์ •์ ์„ ์‹œ์ž‘์œผ๋กœ, ์ •์  ์šฐ์„  ๋ฐ cycle ๋ฐฉ์ง€์˜ ํŠน์ง•์ด ์žˆ์Œ
๐Ÿ‘‹ Tree๋ฅผ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ์กฐ๊ฑด์ด MST์— ์—ฐ๊ฒฐ๋œ ์ •์ ์—์„œ ์•„์ง ์—ฐ๊ฒฐ์ด ์•ˆ๋œ ์ •์ ์— ๋Œ€ํ•ด์„œ ํ™•์žฅ์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ cycle์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ


Dynamic Programming โœ”๏ธ

๐Ÿ‘‰ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•
๐Ÿ‘‰ ๊ฐ™์€ ํ•˜์œ„ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๋„๋ก ๊ตฌํ˜„, ์ด๋ฅผ memoization
โœ‹ ์ฃผ๋กœ, ์ ํ™”์‹์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ
๐Ÿ‘‹ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜๋Š” Top-down, ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜๋Š” Bottom-Up ๋‘ ๊ฐ€์ง€์˜ ๋ฐฉ์‹์ด ์žˆ์Œ
โœ‹ Bottom-Up ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋จ
๐Ÿ‘‹ ์Šคํƒ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์‹œ์Šคํ…œ์ƒ ์žฌ๊ท€๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ๋ถˆ๋ฆฌํ•  ์ˆ˜ ๋ฐ–์— ์—†์Œ


LinkedList

๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ €์žฅํ•˜์ง€ ์•Š๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ ์ฆ‰, ๋™์ ์ธ ํฌ๊ธฐ์™€ ์‚ฝ์ž…/์‚ญ์ œ์— ์šฉ์ด
๐Ÿ‘‰ ์ž„์˜๋กœ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์–ด, ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์†Œ์— ์•ก์„ธ์Šค ํ•˜๋ฏ€๋กœ ์ ‘๊ทผ์— ์žˆ์–ด ๋ถˆ๋ฆฌ
โœ‹ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ •ํ•ด์ ธ ์žˆ๊ณ , ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์— ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ธฐ์— LinkedList๋ฅผ ์‚ฌ์šฉ
โœ‹ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๊ฐ ์š”์†Œ์— ํ•„์š”


Array ๐Ÿ†š List

๐Ÿ‘‰ Array
ใ€€ใ€€๐Ÿ‘‰ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ(์ˆ˜์ • ๋ถˆ๊ฐ€), stack ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
ใ€€ใ€€๐Ÿ‘‰ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์‹œ ๋น„์šฉ์ด ํฌ์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ์ ‘๊ทผ์ด ์ตœ์ ํ™”
ใ€€ใ€€โœ‹ ์—ฐ์†์ ์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌ
ใ€€ใ€€โœ‹ ๋ฐฐ์—ด์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์—ฐ์†์ ์œผ๋กœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ฃผ์†Œ๊ฐ’ + (A * N)byte๋กœ ์กฐํšŒ
๐Ÿ‘‰ List
ใ€€ใ€€๐Ÿ‘‰ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š์œผ๋ฉฐ, heap ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
ใ€€ใ€€๐Ÿ‘‰ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์‹œ ์ „ํ›„ ๋…ธ๋“œ์˜ ์ฐธ์กฐ ๊ด€๊ณ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ 
ใ€€ใ€€๐Ÿ‘‰ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์†Œ์— ์•ก์„ธ์Šค ํ•˜๋ฏ€๋กœ ์ ‘๊ทผ์€ ๋น„ํšจ์œจ์ 
ใ€€ใ€€โœ‹ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์—ฐ์†์ ์œผ๋กœ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ทธ๋งŒํผ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ


Vector

๐Ÿ‘‰ ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ, But, ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ ์ด์ง€ ์•Š์Œ
๐Ÿ‘‰ Array์˜ ์žฅ๋‹จ์ ๊ณผ ๊ฐ™์Œ


Stack

๐Ÿ‘‰ LIFO(Last In First Out) ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‹ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•œ ๊ณณ(๋ฐฉํ–ฅ)์œผ๋กœ ์ด๋ฃจ์–ด์ง
โœ‹ ์›น ํŽ˜์ด์ง€(๋Œ์•„๊ฐ€๊ธฐ, ๋Œ์•„๊ฐ€๊ธฐ Undo) ์ ํ•ฉ


Queue

๐Ÿ‘‰ FIFO(First In First Out) ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‹ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•œ ์ชฝ ๋์œผ๋กœ ์ด๋ฃจ์–ด์ง
โœ‹ ๋ฒ„ํผ์— ์ €์žฅ๋˜์–ด ๋“ค์–ด์˜จ ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ์ ํ•ฉ


Deque

๐Ÿ‘‰ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ์–‘๋ฐฉํ–ฅ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
โœ‹ ๊ตฌํ˜„์ด ์–ด๋ ค์šธ ๋ฟ, Queue & Stack ๋ชจ๋‘์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ


Tree

๐Ÿ‘‰ ๊ฐ’์„ ๊ฐ€์ง„ Node์™€ ์ด๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” Edge๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ cycle์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, cycle์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ทธ๊ฒƒ์€ graph ์ž๋ฃŒ๊ตฌ์กฐ
โœ‹ index๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ์— ์ ํ•ฉ
โœ‹ Tree ์ฐจ์ˆ˜ : ๊ฐ€์žฅ ๋งŽ์€ ์ž์‹ ๋…ธ๋“œ ๊ฐœ์ˆ˜


Graph

๐Ÿ‘‰ ๊ฐ’์„ ๊ฐ€์ง„ Vertex์™€ ์ด๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” Edge๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
โœ‹ ๋‘ Vertex๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Edge์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
โœ‹ ๋‘ Vertex๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Edge์— ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
โœ‹ ๋‘ Vertex๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Edge์— ๋น„์šฉ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„
๐Ÿ‘‹ cycle ๊ด€๊ณ„์˜ data ๊ด€๋ฆฌ์— ์ ํ•ฉ


Hash Table โœ”๏ธ

๐Ÿ‘‰ ์—ฐ๊ด€๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ key์™€ ๊ฒฐ๊ณผ ๊ฐ’(value)๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฐ’(key)์„ ํ•ด์‹œ ๊ฐ’์œผ๋กœ Mapping
โœ‹ ์ ์€ ์ž์›์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
โœ‹ index๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ์— ์ ํ•ฉ
โœ‹ key : ํ•ด์‹œ ํ•จ์ˆ˜์˜ input
โœ‹ hash : ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ, ์ €์žฅ์†Œ(Slot)์—์„œ value์™€ ๋งค์นญ๋˜์–ด ์ €์žฅ
โœ‹ value : ์ €์žฅ์†Œ์— ์ตœ์ข…์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฐ’์œผ๋กœ ํ‚ค์™€ ๋งค์นญ๋˜์–ด ์žˆ์Œ
๐Ÿ‘‹ ์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜ ๊ตฌํ˜„๋ฐฉ๋ฒ• 5๊ฐ€์ง€
ใ€€ใ€€๐Ÿ‘‹ 1) ์ œ์‚ฐ๋ฒ• : ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹, k mod M
ใ€€ใ€€ใ€€ใ€€๐Ÿ‘‹ ์ผ๋ฐ˜์ ์œผ๋กœ, M์˜ ๊ฐ’์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์†Œ์ˆ˜๋กœ ์„ค์ •
ใ€€ใ€€ใ€€ใ€€โœ‹ M์ด ์ง์ˆ˜๋ผ๋ฉด, k ์ง์ˆ˜์ผ ๋•Œ ์ง์ˆ˜ ๋ฐœ์ƒ, k ํ™€์ˆ˜์ผ ๋•Œ ํ™€์ˆ˜ ๋ฐœ์ƒํ•˜์—ฌ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์ง€ X
ใ€€ใ€€๐Ÿ‘‹ 2) ์ œ๊ณฑ๋ฒ• : key ๊ฐ’์„ ์ œ๊ณฑํ•œ ํ›„, key์˜ ๋น„ํŠธ ๊ฐ’์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‹ 3) ํด๋”ฉ๋ฒ• : key์˜ ๋น„ํŠธ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ฐ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฒฐ๊ณผ ๊ฐ’ or XOR ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
ใ€€ใ€€๐Ÿ‘‹ 4) ๊ธฐ์ˆ˜ ๋ณ€ํ™˜๋ฒ• : key ๊ฐ’์˜ ์ง„์ˆ˜๋ฅผ ๋‹ค๋ฅธ ์ง„์ˆ˜๋กœ ๋ณ€ํ™˜์‹œํ‚จ ํ›„, ์ฃผ์†Œ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚œ ๋†’์€ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ฃผ์†Œ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
ใ€€ใ€€๐Ÿ‘‹ 5) ๊ณ„์ˆ˜ ๋ถ„์„๋ฒ• : key ๊ฐ’์„ ์ด๋ฃจ๋Š” ์ˆซ์ž์˜ ๋ถ„ํฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋น„๊ต์  ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฆฌ ์ˆ˜๋“ค์„ ์ฃผ์†Œ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
ใ€€ใ€€ใ€€ใ€€โœ‹ ํ•™๋ฒˆ; ์ž…ํ•™๋…„๋„ ์˜๋ฏธํ•˜๋Š” ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ˆ˜


Hash Table ์ถฉ๋Œ ํ•ด๊ฒฐ ๊ธฐ๋ฒ• โœ”๏ธ

๐Ÿ‘‰ ํ•ด์‹œ ์ถฉ๋Œ; ๋‹ค๋ฅธ ๋‚ด์šฉ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ํ•ด์‹œ ๊ฐ’์œผ๋กœ Mapping ํ–ˆ์„ ๋•Œ ๊ฐ™์•„์ง„ ์ƒํ™ฉ
โœ‹ ๋„ˆ๋ฌด ๋งŽ์€ ํ•ด์‹œ ์ถฉ๋Œ์€ Hash Table์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜
โœ‹ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ž˜ ์ •์˜ํ•˜์—ฌ ํ•ด์‹œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™” ํ•ด์•ผํ•จ
๐Ÿ‘‰ 1. Chaining : ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด LinkedList๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹(Close Addressing)
๐Ÿ‘‰ 2. Open Addressing
ใ€€ใ€€๐Ÿ‘‰ 1) ์„ ํ˜• ํƒ์ƒ‰ : ๋‹ค์Œ ๋ฒ„์ผ“ ํ˜น์€ ๋ช‡ ๊ฐœ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
ใ€€ใ€€๐Ÿ‘‰ 2) ์ œ๊ณฑ ํƒ์ƒ‰ : ์ œ๊ณฑ๋งŒํผ ๊ฑด๋„ˆ๋›ด ๋ฒ„์ผ“์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
ใ€€ใ€€๐Ÿ‘‰ 3) ์ด์ค‘ ํ•ด์‹œ : ๋‹ค๋ฅธ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋” ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉ
ใ€€ใ€€๐Ÿ‘‰ 4) ์žฌํ•ด์‹ฑ : ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ , ๋Š˜์–ด๋‚œ ํฌ๊ธฐ์— ๋งž์ถฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค์‹œ ํ•ด์‹ฑ


Set

๐Ÿ‘‰ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , key๋ฅผ ์›์†Œ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


Map

๐Ÿ‘‰ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , key์™€ value๋ฅผ ์›์†Œ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


Trie ๐Ÿ”ฅ

๐Ÿ‘‰ ๋ฌธ์ž์—ด์—์„œ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ๋„์™€์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


Binary Search Tree

๐Ÿ‘‰ ์ด์ง„ ํƒ์ƒ‰์˜ ๋น ๋ฅธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ์žฅ์ ๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋น ๋ฅธ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์žฅ์ ์„ ๋™์‹œ์— ๊ฐ–๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ ๊ฐ ๋…ธ๋“œ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์ž์‹์€ ์ž‘์€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๊ณ , ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ํฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Œ
โœ‹ ๊ฒ€์ƒ‰ ๋ชฉ์  ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์ค‘๋ณต์ด ์žˆ๊ฑฐ๋‚˜ ๋งŽ์„ ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ , ์ค‘๋ณต์ด ์—†์–ด์•ผ ํ•จ
โœ‹ ์ค‘์œ„ ์ˆœํšŒ๋กœ ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Œ


B Tree & B+ Tree

โœ‹ BST๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ๊ฐ€ ๋‘ ๊ฐœ์˜ ์ž์‹๋ฐ–์— ๊ฐ€์ง€์งˆ ๋ชปํ•˜๋ฏ€๋กœ, ๊ท ํ˜•์ด ๋งž์ง€ ์•Š์„ ๋•Œ ๊ฒ€์ƒ‰ ํšจ์œจ์ด ์„ ํ˜•๊ฒ€์ƒ‰ ๊ธ‰์œผ๋กœ ๋งค์šฐ ๋–จ์–ด์ง
๐Ÿ‘‰ B Tree๋Š” BST๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋” ๋งŽ์€ ์ž์‹์˜ ์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ฐ˜ํ™” ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ํ•ญ์ƒ ๋งž๋‹ค๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
๐Ÿ‘‰ B+ Tree๋Š” B Tree๋ฅผ ๊ฐœ์„ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ‘‰ B+ Tree์˜ leaf node๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ˆœ์ฐจ ๊ฒ€์ƒ‰์ด ์šฉ์ดํ•จ
๐Ÿ‘‹ B Tree๋Š” ๊ฐ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐ˜๋ฉด, B+ Tree๋Š” index ๋…ธ๋“œ์™€ leaf ๋…ธ๋“œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ €์žฅ๋จ
ใ€€ใ€€๐Ÿ‘‹ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” leaf ๋…ธ๋“œ์—๋งŒ ์กด์žฌํ•˜๋ฉฐ, index ๋…ธ๋“œ์—๋Š” ๋ฒ”์œ„ ์ •๋ณด๊ฐ€ ์กด์žฌํ•จ


RB Tree(Red-Black Tree) ๐Ÿ”ฅ

โœ‹ ๊ฐ ๋…ธ๋“œ๋Š” red or black์˜ ์ƒ‰์„ ๊ฐ€์ง
โœ‹ root node์˜ ์ƒ‰์€ ํ•ญ์ƒ black
โœ‹ ๊ฐ leaf node์˜ ์ƒ‰์€ black
โœ‹ ์–ด๋–ค ๋…ธ๋“œ์˜ ์ƒ‰์ด red๋ผ๋ฉด ๋‘ ๊ฐœ์˜ child node์˜ ์ƒ‰์€ ๋ชจ๋‘ black
โœ‹ ๋ชจ๋“  leaf node์—์„œ root node๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์—์„œ ๋งŒ๋‚˜๋Š” black ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” ๋™์ผ
โœ‹ ์‚ฝ์ž…๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ƒ‰์€ red, ํ•˜์ง€๋งŒ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ recoloring ํ˜น์€ restructuring ์ ์šฉ
โœ‹ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” BST๋ฅผ RB Tree
๐Ÿ‘‹ Link



๐Ÿ’š Additional

Map ๐Ÿ†š HashMap

โœ‹ ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ
๐Ÿ‘‰ Map์€ RB Tree์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์Œ
๐Ÿ‘‰ HashMap์€ Hash์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์Œ


์ƒ์„ฑ์ž ๋ฐ ์†Œ๋ฉธ์ž

๐Ÿ‘‹ Link


์–‡์€ ๋ณต์‚ฌ ๐Ÿ†š ๊นŠ์€ ๋ณต์‚ฌ (์ƒ์„ฑ์ž)

๐Ÿ‘‰ ์–‡์€ ๋ณต์‚ฌ
ใ€€ใ€€๐Ÿ‘‰ ์ตœ์†Œํ•œ์˜ ๋ณต์‚ฌ๋ฅผ ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฃผ์†Œ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
๐Ÿ‘‰ ๊นŠ์€ ๋ณต์‚ฌ
ใ€€ใ€€๐Ÿ‘‰ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๋‘ ๊ฐ์ฒด๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€


์ƒ์†๊ณผ ๊ฐ์ฒด ํฌ์ธํ„ฐ

๐Ÿ‘‹ Link


virtual

๐Ÿ‘‹ Link


using namespace std

๐Ÿ‘‰ std ; C++ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ๊ฒƒ์€ std๋ผ๋Š” namespace์— ์กด์žฌ
๐Ÿ‘‰ namespace ; ๋ชจ๋“  ์‹๋ณ„์ž(๋ณ€์ˆ˜, ํ•จ์ˆ˜)๊ฐ€ ๊ณ ์œ ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ
๐Ÿ‘‰ using ; ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค



*****
NOT A TALENT โŽ NOT GIVING UP โœ…
CopyRight โ“’ 2022 DCherish All Rights Reserved.