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

๐Ÿ—ฃ๏ธ ์‹ ์ž… ์ธํ„ฐ๋ทฐ/C++

(10)
์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ : C++ ์ •๋ ฌ ์ด์ •๋ฆฌ (๋ฒ„๋ธ”, ์‚ฝ์ž…, ์„ ํƒ, ํ€ต, ํž™, ๋ณ‘ํ•ฉ) ํ™”์ดํŠธ๋ณด๋“œ๋‚˜ ์ข…์ด๋‚˜ ๋น„์ฅฌ์–ผ ์ŠคํŠœ๋””์˜ค์— ์ž‘์„ฑํ•˜๋ฉด์„œ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๋ธ”, ์‚ฝ์ž…, ์„ ํƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋‘ ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋‚˜ ์ž‘์€ ๋ฐ์ดํ„ฐ์…‹์—๋Š” ์—ฌ์ „ํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ๋ถ€๋ถ„์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ ์„ ๋•Œ๋Š” ์‚ฝ์ž… ์ •๋ ฌ์ด ๋‹ค๋ฅธ ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ O(NlogN) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ, ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ์™€ ์บ์‹œ ํšจ์œจ ๋ฌธ์ œ๋กœ ์ธํ•ด ํ‰๊ท ์ ์ธ ์„ฑ๋Šฅ์ด ํ€ต ์ •๋ ฌ๋ณด๋‹ค ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ๊ณผ ํ€ต ์ •๋ ฌ์€ ๋‘˜ ๋‹ค ํšจ์œจ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์ง€๋งŒ, ์ž‘๋™ ๋ฐฉ์‹์— ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ ์›๋ฆฌ: ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ ..
์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ : C++ 05 (์†์ฝ”๋”ฉ: Heapify, ์ตœ๋Œ€ํž™, ์ด์ง„ํƒ์ƒ‰) ์•ˆ๋…•ํ•˜์„ธ์š”, ์ซ€๋ƒ๋ฏธ์ž…๋‹ˆ๋‹ค. ์†์ฝ”๋”ฉ์€ ์ฒ˜์Œ์ด๋ผ์„œ์š” ... ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค (_ _ ) ๐Ÿ—ฃ๏ธ Heapify ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š” #include using namespace std; void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int num = 9; int heap[9] = {7, 6, 5, 8, 3, 5, 9, 1, 6}; int main() { for (int i = 1; i < num; i++) { int c = i; do { int root = (c - 1) / 2; if (heap[root] < heap[c]) { swap(heap[root], heap[c]); } c = root; } while (c..
์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ : C++ 04 (C, C#, Java์™€์˜ ์ฐจ์ด์ ) ๐Ÿ—ฃ๏ธ C++๊ณผ C์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง€์›์— ์žˆ์–ด ์–ด๋–ค ์ฃผ์š” ์ฐจ์ด์ ์ด ์žˆ๋‚˜์š”? C++์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์›์น™๋“ค์„ ์ง์ ‘์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ฐ˜๋ฉด, C๋Š” ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ฃผ๋กœ ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. C์—์„œ๋Š” ๊ตฌ์กฐ์ฒด(struct)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. C์—์„œ๋Š” ์ƒ์†์ด๋‚˜ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ์ถ”์ƒํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ C++์€ ๊ฐ์ฒด ์ค‘์‹ฌ, namespace, ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ—ฃ๏ธ C++๊ณผ Java์—์„œ ์–ด๋–ค ์ฃผ์š” ์ฐจ์ด์ ์ด ์žˆ๋‚˜์š”? Java ๋Š” ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ณ  ํœด๋Œ€์„ฑ์ด ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ฐ˜๋ฉด, C++์€ ์„ฑ๋Šฅ๊ณผ ์ €์ˆ˜์ค€์˜ ์‹œ์Šคํ…œ ..
๐Ÿงž‍โ™‚๏ธ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ๋ฉด์ ‘ : C++ 02 ์•ˆ๋…•ํ•˜์„ธ์š”, ์ซ€๋ƒ๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฃผ์–ธ์–ด๊ฐ€ C++์ด์ง€๋งŒ Java, Python ์–ธ์–ด ๊ด€๋ จ ์ง€์‹๋„ ์ฒจ๋ถ€ํ•œ ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ—ฃ๏ธ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๋ช‡ ๋ฐ”์ดํŠธ์ธ์ง€๋„ ๋ง์”€ํ•ด ์ฃผ์„ธ์š”. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ํŠน์ • ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋•Œ, ๋งค๋ฒˆ ์กฐ๊ฑด์„ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์ฒ˜์Œ์— ํ•œ ๋ฒˆ๋งŒ ์กฐ๊ฑด์„ ์ฒดํฌํ•˜์—ฌ ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„์—๋Š” ์กฐ๊ฑด์„ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•  ํ•„์š” ์—†์ด ํ•ด๋‹น ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ, ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜..