๐Ÿ’ป Dev & CS

Merge Sort Algorithm

ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort)์ด๋ž€? ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜(=Divide and conquer algorithm ์ฆ‰, ๊ทธ๋Œ€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.)์˜ ํ•˜๋‚˜๋กœ O(n log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ์ž‘๋™ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๋ณธ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๋ถ„ํ• (divide) : ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ •๋ณต(conquer) : ๊ฐ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌ์„ ์ด์šฉํ•ด ์ •๋ ฌํ•œ๋‹ค. ๊ฒฐํ•ฉ(combine) : ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ์ด๋•Œ ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ์ž„์‹œ๋ฐฐ์—ด์— ์ €์žฅ๋œ๋‹ค. ๋ณต์‚ฌ(copy) : ์ž„์‹œ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ ์›๋ž˜ ๋ฐฐ์—ด์— ๋ณต์‚ฌํ•œ๋‹ค. ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ„๋‹ค๋ฉด ์•„๋ž˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ†ตํ•ด ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ...

March 18, 2020 ยท 3 min ยท Sobamemil
๐Ÿ’ป Dev & CSC++ Programming

C++ Programming Ch.9 Exercise 3 Solution

Problem: ๋‹ค์Œ ์ถ”์ƒ ํด๋ž˜์Šค LoopAdder๊ฐ€ ์žˆ๋‹ค. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class LoopAdder { // ์ถ”์ƒ ํด๋ž˜์Šค string name; // ๋ฃจํ”„์˜ ์ด๋ฆ„ int x, y, sum; // x์—์„œ y๊นŒ์ง€์˜ ํ•ฉ์€ sum void read(); // x, y ๊ฐ’์„ ์ฝ์–ด ๋“ค์ด๋Š” ํ•จ์ˆ˜ void write(); // sum์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜ protected: LoopAdder(string name="") { // ๋ฃจํ”„์˜ ์ด๋ฆ„์„ ๋ฐ›๋Š”๋‹ค. ์ดˆ๊นƒ๊ฐ’์€ "" this->name = name; } int getX() { return x; } int getY() { return y; } virtual int calculate() = 0; // ์ˆœ์ˆ˜ ๊ฐ€์ƒ ํ•จ์ˆ˜. ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ public: void run(); // ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ }; void LoopAdder::read() { // x, y ์ž…๋ ฅ cout << name << ":" << endl; cout << "์ฒ˜์Œ ์ˆ˜์—์„œ ๋‘๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ๋”ํ•œ๋‹ค. ๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” >> "; cin >> x >> y; } void LoopAdder::write() { // ๊ฒฐ๊ณผ sum ์ถœ๋ ฅ cout << x << "์—์„œ " << y << "๊นŒ์ง€์˜ ํ•ฉ = " << sum << " ์ž…๋‹ˆ๋‹ค" << endl; } void LoopAdder::run() { read(); // x, y๋ฅผ ์ฝ๋Š”๋‹ค sum = calculate(); // ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ๊ณ„์‚ฐํ•œ๋‹ค. write(); // ๊ฒฐ๊ณผ sum์„ ์ถœ๋ ฅํ•œ๋‹ค. } Write a ๋‹ค์Œ main() ํ•จ์ˆ˜์™€ Execution Result์ฒ˜๋Ÿผ ๋˜๋„๋ก ForLoopAdder class that inherits from the LoopAdder class. ForLoopAdder ํด๋ž˜์Šค์˜ calculate() ํ•จ์ˆ˜๋Š” for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค. ...

November 21, 2019 ยท 3 min ยท Sobamemil
๐Ÿ’ป Dev & CSC++ Programming

C++ Programming Ch.9 Exercise 2 Solution

Problem: The following is an abstract class Converter that converts units. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Converter { protected: double ratio; virtual double convert(double src)=0; // src๋ฅผ ๋‹ค๋ฅธ ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. virtual string getSourceString()=0; // src ๋‹จ์œ„ ๋ช…์นญ virtual string getDestString()=0; // dest ๋‹จ์œ„ ๋ช…์นญ public: Converter(double ratio) { this->ratio = ratio; } void run(){ double src; cout << getSourceString() << "์„ " << getDestString() << "๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. "; cout << getSourceString() << "์„ ์ž…๋ ฅํ•˜์„ธ์š”>> "; cin >> src; cout << "๋ณ€ํ™˜ ๊ฒฐ๊ณผ : " << convert(src) << getDestString() << endl; } }; Write a km๋ฅผ mile(๋งˆ์ผ)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” KmToMile class that inherits from the Converter class. The main() function and execution result are as follows. ...

November 20, 2019 ยท 2 min ยท Sobamemil