Description
– Inheritance & polymorphism –
์ฃผ์์ฌํญ
โ ํด๋์ค์ ์ธ๋ฐ์ ์๋ฅผ main.cpp ํ์ผ์์์ฑํ๋๊ฒ์๊ธ์งํฉ๋๋ค. ๊ทธ์ธ์์ ์ธ๋ฐ์ ์์ ์์น์๋ํ์ ์ฝ์์์ต๋๋ค.
โ STL ์ฌ์ฉ์ด๊ฐ๋ฅํฉ๋๋ค.
โ ๋ชจ๋ C++ ๋ฌธ๋ฒ์ด์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
โ ๋ฌธ์ ์์์ ๊ณตํํ์์์ค์ํด์ผํฉ๋๋ค.
โ ๋ฌธ์ ์๋ช
์๋์ด์์ง์๋๋ผ๋์๋ฉธ์(Destructor)์๊ฐ์๋ฉ๋ชจ๋ฆฌ๋์๋ฐฉ์ง๋ฅผ์ํดํ์ํ ๋ฉค๋ฒํจ์๋ํ์์ ์ผ๋ก๊ตฌํ๋์ด์ผํฉ๋๋ค.
โ ๋ฌธ์ ์กฐ๊ฑด์ด๋ณต์กํฉ๋๋ค. ๋ชจ๋ ๋ฌธ์ ์์ธ๋ถ์กฐ๊ฑด์๊ผผ๊ผผํ์ฝ์ด๋ณด์๊ธฐ๋ฐ๋๋๋ค.
โ ๊ณผ์ ๊ด๋ จ์ง๋ฌธ์ PLMS๋ฅผํตํด๋ฌธ์๋ฐ๋๋๋ค.
๊ฐ์
โ ์ ์ถ๊ธฐํ์์ํ๋ฃจ(24์๊ฐ) ๋ฆ์๋๋ง๋ค 20%์ฉ๊ฐ์
โ 1์ผ(20%) , 2์ผ(40%), โฆ 5์ผ(100%)
โ ์ปดํ์ผ์ด์ ์์ ์ผ๋ก์ด๋ฃจ์ด์ง์ง์์๊ฒฝ์ฐ 0์
โ ์ ์ถํ์์๋ฐ (ํ์ผ์ด๋ฆ๋ฑ)
์ ์ถ๋ฐฉ์
(๋งฅ์ฌ์ฉ์์๊ฒฝ์ฐ) ํ๊ฒฝ์์์ด๋ฃจ์ด์ง๋๋ค. VS ๋ก์์
ํ์๊ฒฝ์ฐ์์
ํ์ ํ๊ฒฝ์ด์๋ visual studio ํ๋ก์ ํธํด๋์ Report ๋ฅผํฌํจํ์ฌ zip ํ์ผ๋ก์์ถํ์ ์ถํด์ฃผ์๊ธฐ๋ฅผ๋ฐ๋๋๋ค. (x64 ๋ฐ .vs ํด๋๋ ์ ๋ถ์ง์์ฃผ์ญ์์ค) ๋ง์ฐฌ๊ฐ์ง๋ก, ๋งฅ์ด์ฉ์์๊ฒฝ์ฐ์์ค์ฝ๋, ๋ณด๊ณ ์, Makefile์ํฌํจํํด๋๋ฅผ ์์ถํด์์ ์ถํด์ฃผ์๋ฉด๋ฉ๋๋ค. ํด๋๋ช
์ โํ๋ฒโ์ผ๋ก๋ง๋ค์ด์ฃผ์๊ณ , Report๋ docx ๋ pdf ํ์์ผ๋ก ์ ์ถํด์ฃผ์ธ์. ๋ฐ๋์ PLMS ๋ฅผํตํด์ ์ถํด์ฃผ์๊ธฐ๋ฅผ๋ฐ๋๋๋ค. ์ด๋ฉ์ผ์ ์ถ์์ธ์ ๋์ง์์ต๋๋ค. ํด๋
์ด๋ฆ๊ณผ์์ถํ์ผ์ โAssign3_ํ๋ฒโ์ผ๋ก๋ง๋์๋ฉด๋ฉ๋๋ค (e.g., Assign3_20229999).
๊ณตํต์ฑ์ ๊ธฐ์ค
1. ํ๋ก๊ทธ๋จ๊ธฐ๋ฅ
โ ํ๋ก๊ทธ๋จ์ด์๊ตฌ์ฌํญ์๋ชจ๋๋ง์กฑํ๋ฉด์์ฌ๋ฐ๋ก์คํ๋๋๊ฐ?
2. ํ๋ก๊ทธ๋จ์ค๊ณ๋ฐ๊ตฌํ
โ ์๊ตฌ์ฌํญ์๋ง์กฑํ๊ธฐ์ํ๋ณ์๋ฐ์๊ณ ๋ฆฌ์ฆ์ค๊ณ๊ฐ์๋์๋๊ฐ?
โ ๋ฌธ์ ์์์ ์๋์ธ๋ถ์กฐ๊ฑด์๋ชจ๋๋ง์กฑํ์๋๊ฐ?
โ ์ค๊ณ๋๋ด์ฉ์ด์๊ตฌ๋์ธ์ด๋ฅผ์ด์ฉํ์ฌ์ ์ ํ๊ตฌํ๋์๋๊ฐ?
3. ํ๋ก๊ทธ๋จ๊ฐ๋
์ฑ
โ ํ๋ก๊ทธ๋จ์ด์ฝ๊ธฐ์ฝ๊ณ ์ดํดํ๊ธฐ์ฝ๊ฒ์์ฑ๋์๋๊ฐ?
โ ๋ณ์๋ช
์ด๋ฌด์์์๋ฏธํ๋์ง์ดํดํ๊ธฐ์ฌ์ด๊ฐ?
โ ํ๋ก๊ทธ๋จ์์์ค์ฝ๋๋ฅผ์ดํดํ๊ธฐ์ฝ๋๋ก์ฃผ์์์๋ถ์๋๊ฐ?
4. ๋ณด๊ณ ์๊ตฌ์ฑ๋ฐ๋ด์ฉ, ์์
โ ๋ณด๊ณ ์๋์ ์ ํ๋ด์ฉ์ผ๋ก์ดํดํ๊ธฐ์ฝ๊ณ ๋ณด๊ธฐ์ข๊ฒ์์์ฑ๋์๋๊ฐ?
โ ๋ณด๊ณ ์์์์์์๋ฐ๋๋๊ฐ?
๋ค๋ฅธ์ฌ๋์ํ๋ก๊ทธ๋จ์ด๋์ธํฐ๋ท์์๋ํ๋ก๊ทธ๋จ์๋ณต์ฌ(copy)ํ๊ฑฐ๋๊ฐ๋จํ์์ ํด์์ ์ถํ๋ฉด ํ์ ์๋ฌด์กฐ๊ฑด โFโ๊ฐ๋ฉ๋๋ค. ์ด๋ฌํ๋ถ์ ํ์๊ฐ๋ฐ๊ฒฌ๋๋ฉดํ๊ณผ์์์ ํ๊ธฐ์ค์๋ฐ๋ผ์ถ๊ฐ์ ์ธ๋ถ์ด์ต์ด ์์์์์ต๋๋ค.
ASCII Art
ASCII art๋ ASCII ๋ฌธ์๋ง์์ฌ์ฉํ์ฌ๊ทธ๋ฆผ์ด๋๋ํ์๋ง๋๋์์ ํ์์ด๋ค. ์๋ฅผ๋ค์ด์, ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด์์์์ฌ์ง์์์ด๋์ด๋ถ๋ถ์ํด๋นํ๋์์น์๋ณต์กํ๊ธ์๋ฅผ์์น์ํค๊ณ ๋ฐ์๋ถ๋ถ์๋๋จ์ํ ๊ธ์๋ฅผ์์น์ํค๋ฉด๋ฌธ์๋ก๋ง์ด๋ค์ง๊ทธ๋ฆผ์ด์๋์๊ฐ์ด๋ณด์ด๊ฒ๋๋ค. ๋ณธ๊ณผ์ ์์๋ํด๋์ค์์๊ณผ ๋คํ์ฑ์์ฌ์ฉํด์๊ฐ๋จํ ASCII Art๋ฅผ์์ฑํ๋ํ๋ก๊ทธ๋จ์๋ง๋๋๊ฒ์๋ชฉ์ ์ผ๋กํ๋ค.
[ ๊ทธ๋ฆผ1. ASCII art example]
๋ฌธ์ ํด๊ฒฐ์์ํด์ฌ์ฉ๋๋ class์์์๊ด๊ณ๋์๋๊ทธ๋ฆผ 2๊ณผ๊ฐ๋ค. ํ์ดํ๋์์์์๋ฏธํ๊ณ
๋ฐฉํฅํ์๊ฐ์๋ class๊ฐ๋ถ๋ชจ class๋ค. ์๋ฅผ๋ค์ด์ classic class๋ artist class๋ฅผ์์๋ฐ๋๋ค.
[ ๊ทธ๋ฆผ2. Class diagram ]
ํ๋ก๊ทธ๋จ์๊ตฌํ์์๋์๊ฐ์์ ์ฝ์ฌํญ๋ค์ด๋ฐ๋ฅธ๋ค.
โ ๊ทธ๋ฆผ2์๋ช
์๋๋ฉค๋ฒ๋ณ์๋ฐํจ์๋๋ฐ๋์๊ตฌํ๋๊ณ ์ฌ์ฉ๋์ด์ผํ๋ค.
โ ๊ทธ๋ฆผ2์๋ช
์๋๋ฉค๋ฒํจ์์์ธ์์ return type์ด์ค์๋์ด์ผํ๋ค.
โ ๊ทธ๋ฆผ2์๋ช
์๋ class ์ธ์๋ค๋ฅธ class๋ฅผ์ ์ํด์์ฌ์ฉํ ์์๋ค.
โ ์ ๊ณต๋ํจ์(function) ์ธ์ํจ์๋ฅผ์ ์ํด์์ฌ์ฉํ ์์๋ค.
โ class diagram์๋ช
์๋๋ฉค๋ฒํจ์(method)์๋ฉค๋ฒ๋ณ์์ธ์๋ํ์ํ๋ฉค๋ฒํจ์๋ฐ๋ฉค๋ฒ๋ณ์๋ฅผ ์์ ๋กญ๊ฒ์ถ๊ฐํ ์์๋ค.
โ ์ฃผ์ด์ง main ํจ์๋์ ๋๋ก์์ ํ ์์๋ค.
๊ทธ๋ฆผ 2์ํํ๋ํด๋์ค๋ฐ main ํจ์์๋ํ์์ธํ์ค๋ช
์์๋์๊ฐ๋ค.
int main(int argc, char *argv[])
C++ main ํจ์์ int ์ char*[] ๋ฅผ argument๋ก์ ์ํ๊ฒฝ์ฐ, ์ฒซ๋ฒ์งธ์ธ์๋ํ๋ก๊ทธ๋จ์คํ์์
๋ ฅ๋ฐ์ argument์์, ๋๋ฒ์งธ์ธ์๋์ค์ argument ๊ฐ๋ค์๊ฐ๋๋ค. ์๋ฅผ๋ค์ด์์์์ compile๋ํ๋ก๊ทธ๋จ
hello ๋ฅผ
./hello 2 world 1234
๋ผ๋๋ช
๋ น์ด๋ก์คํ์ํฌ๊ฒฝ์ฐ argc ๋ 4, argv[1] ๋ 2 argv[2] ๋ world, argv[3] ๋ 1234๊ฐ๋๋ค. ์ฐธ๊ณ ๋ก argv[0]์๋์คํํ์ผ๊ฒฝ๋ก๊ฐ์๋์ผ๋กํ ๋น๋๋ฉฐ, ๋ฐ๋ผ์ argc ๋ 3์ด์๋ 4๊ฐ๋๋ค.
๋ณธ๊ณผ์ ์์์ต์ข
compile๋ํ๋ก๊ทธ๋จ์์คํ์ 3๊ฐ์์ธ์๋ฅผ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ์ธ์๋ inputํ์ผ์๊ฒฝ๋ก,
๋๋ฒ์งธ์ธ์๋ configuration ํ์ผ์๊ฒฝ๋ก, ์ธ๋ฒ์งธ์ธ์๋ output ํ์ผ์๊ฒฝ๋ก๋ค. ์ฃผ์ด์ง mainํจ์๋์๋์๊ฐ์ผ๋ฉฐ์ ๋์์ ์๋ถ๊ฐํ๋ค.
int main(int argc, char *argv[]) {
if (argc != 4) {
cout << “argc is not 4, but ” << argc << endl; throw;
}
// CREATE PARSER parser p;
// LOAD IMAGE AND CONFIG
vector<int> tokens = p.load_image(argv[1]); vector<string> configs = p.load_config(argv[2]);
string style_target = configs[0]; string drawer_target = configs[1]; char *path_output = argv[3];
int width = tokens[0]; int height = tokens[1];
vector<int> vals = {tokens.begin() + 2, tokens.end()};
// CREATE ARTIST artist *style;
if (style_target == “classic”) { style = new classic(width, height, vals);
} else if (style_target == “iclassic”) { style = new iclassic(width, height, vals);
} else if (style_target == “sobelx”) { style = new sobelx(width, height, vals);
} else if (style_target == “sobely”) { style = new sobely(width, height, vals);
} else if (style_target == “gradient”) { style = new gradient(width, height, vals);
} else { throw;
}
// CREATE DRAWER drawer *d;
if (drawer_target == “drawer”) {
d = new drawer(style);
} else if (drawer_target == “upsample”) { d = new upsample(style);
} else if (drawer_target == “downsample”) { d = new downsample(style);
} else if (drawer_target == “scale”) { int scale_x = stoi(configs[2]); int scale_y = stoi(configs[3]); d = new scale(style, scale_x, scale_y);
} else { throw;
}
// PERFORM DRAWING string output = d->draw(); cout << output;
// WRITE OUTPUT
p.write_result(path_output, output); delete d; return 0;
}
vector<int> parser::load_image(const char*)
์ธ์๋ก input file์๊ฒฝ๋ก๋ฅผ๋ฐ๊ณ ํด๋นํ์ผ์์ ๋ณด๋ฅผ๋ถ๋ฌ์จ๋ค. input ํ์ผ์๋ด์ฉ์์ผ๋ จ์์ซ์๋ค์ด delimiter โ|โ ์ํตํด๋๋ ์ ธ์๋ค. ์๋ฅผ๋ค์ด์ input ํ์ผ์๋ด์ฉ์ด
3|2|101|102|103|104|105|106
์๊ฐ๋ค๋ฉด, ํด๋นํจ์์ return ๊ฐ์
vector<int> { 3 ,2, 101, 102, 103, 104, 105, 106 }
์ด๋๋ค. ์ฌ๊ธฐ์์ฒ์๋๊ฐ์๊ทธ๋ ค์ง๊ทธ๋ฆผ์ width์ height๋ฅผ์๋ฏธํ๊ณ ๋๋จธ์ง๊ฐ์๊ฐ์ขํ์ํด๋น๋๋ pixel ๊ฐ์ด๋ค. ์๋ฅผ๋ค์ด์์์ ๋ณด๋
101
(0,0) 102
(1,0) 103
(2,0)
104
(0,1) 105
(1,1) 106
(2,1)
์๊ฐ์ด์๊ฐํ๋ ์์๋ค. ์ฌ๊ธฐ์๊ดํธ์์์ ๋ณด๋ x,y ์ขํ๋ฅผ์๋ฏธํ๋ค. ์ดํ artist์ drawer class๋ฅผ ํตํด์ํด๋น๊ฐ์ดํน์ ASCII ๋ฌธ์๋ก๋ณํ๋๋ฉฐ๊ทธ๋ฆผ์๊ทธ๋ฆฌ๊ฒ๋๋ค.
vector<string> parser::load_config(const char*)
์ธ์๋ก config file์๊ฒฝ๋ก๋ฅผ๋ฐ๊ณ ํด๋น์ ๋ณด๋ฅผ๋ถ๋ฌ์จ๋ค. config ํ์ผ์๋ด์ฉ์์ผ๋ จ์ text๋ค์ด delimiter โ|โ ์ํตํด๋๋ ์ ธ์๋ค. ์ฒซ๋ฒ์งธ๊ฐ์์ฌ์ฉ๋ artist class์์ด๋ฆ, ๋๋ฒ์งธ๊ฐ์์ฌ์ฉ๋ drawer class์ ์ด๋ฆ์์๋ฏธํ๋ค. ์๋ฅผ๋ค์ด์ config ํ์ผ์๋ด์ฉ์ด
iclassic|upsample
์๊ฐ๋ค๋ฉด, ํด๋นํจ์์ return ๊ฐ์
vector<string> { โiclassicโ, โupsampleโ}
์ด๋๋ค.
void parser::write_result(const char*, const string&)
์ฒซ๋ฒ์งธ์ธ์๋ก์ ์ฅํ ํ์ผ๊ฒฝ๋ก, ๋๋ฒ์งธ์ธ์๋ก์ ์ฅํ ๋ด์ฉ์ด๋ค์ด์จ๋ค. ์๋ฅผ๋ค์ด์
p.write_result(โoutput.txtโ,โhello worldโ)
๋ฅผํธ์ถํ๋ฉด output.txtํ์ผ์ด โhello worldโ๋ผ๋๋ด์ฉ์ด๋ด๊ฒจ์์์ฑ๋๋ค. ํด๋นํจ์๋ก์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ฒ๋๋ค. ์์๋์๋์๊ฐ์ผ๋ฉฐ์์๋ฅผ๊ทธ๋๋ก์ฌ์ฉํด๋๋ฌด๋ฐฉํ๋ค.
void parser::write_result(const char *path, const string& contents) {
ofstream myfile; myfile.open(path); myfile << contents; myfile.close();
}
artist(int, int, const std::vector<int>&)
artist class๋๊ทธ๋ฆผ์์คํ์ผ์์ ์ํ๋ class๋ค. ๋ค์ํ์คํ์ผ class๋ค์ด artist class๋ฅผ์์๋ฐ์์ ์์ ๋ง์์คํ์ผ์์ ์ํ๊ฒ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ์ค๋ช
ํ drawer class๊ฐ artist class์ instance๋ฅผ ์ธ์๋ก๋ฐ์์์ต์ข
์ ์ธ๊ทธ๋ฆผ์๊ทธ๋ฆฌ๊ฒ๋๋ค.
์์ฑ์๋์ฒซ๋ฒ์งธ์ธ์๋ก๊ทธ๋ฆผ์ width, ๋๋ฒ์งธ์ธ์๋ก๊ทธ๋ฆผ์ height, ์ธ๋ฒ์งธ์ธ์๋ก๊ทธ๋ฆผ์๊ฐ์ขํ์
ํด๋นํ๋ pixel ๊ฐ์๋ฐ๋๋ค. ์ฆ, input ํ์ผ parsing ๊ฒฐ๊ณผ๋ฅผ์ธ์๋ก๋ฐ๋๋ค.
virtual char mapper(int, int)
์ฒซ๋ฒ์งธ์ธ์๋ก x coordinate, ๋๋ฒ์งธ์ธ์๋ก y coordinate์๋ฐ๊ณ , ์ฌ์ฉ๋ ASCII ๋ฌธ์๋ฅผ returnํ๋ค. ๋คํ์ฑ์๊ตฌํํ๊ธฐ์ํ virtual method์ด๊ธฐ๋๋ฌธ์ํด๋น class์์๋๊ตฌํ๋์ง์๊ณ ์์๋ฐ๋ class์์ ๊ตฌํ๋๋ค.
char classic::mapper(int, int)
classic class์ mapper๋๊ฐ์ฅ์ผ๋ฐ์ ์ธ ASCII Art์ mapping์๊ตฌํํ๋ค. ์ด๋ฏธ์ง๋ display์ํํ๋ ๋ pixel๊ฐ์ด์์์๋ก์ด๋ก๊ฒ๋ํ๋๋ค. ์ด๊ด์ฐฐ์๊ทผ๊ฑฐํด์ pixel ๊ฐ์ด๋ฎ์์๋ก์๊ฐ์ ์ผ๋ก denseํ ASCII ๋ฌธ์๋ฅผ๋์
์์ผ๊ทธ๋ฆผ์ํํํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก classic::mapper๋ pixel์ํํํ๊ธฐ์ํด์
15๊ฐ์ ASCII ๋ฌธ์
โ@โ โ&โ โ%โ โWโ โXโ โAโ โHโ โOโ โTโ โ*โ โ^โ โ+โ โ-โ โ.โ โ โ
๋ฅผ์ฌ์ฉํ๋ค. ์ผ์ชฝ๋ถํฐ pixel ๊ฐ์ด๋ฎ์๊ฒฝ์ฐ์๋์๋๊ณ ๊ฐ๋ฌธ์๋ [0, 254] ์ฌ์ด์๊ฐ์ 17๊ฐ์ฉ๊ท ์ผํ๊ฒ ์ปค๋ฒํ๋ค. ์๋ฅผ๋ค์ด์ โ@โ๋ [0, 16], โ&โ ๋ [17, 33]๋ฅผ์ปค๋ฒํ๋ค. ์์ธ์ ์ผ๋ก๋ง์ง๋ง๋ฌธ์๋ง 18๊ฐ, [238,
255]์๋ฒ์๋ฅผ์ปค๋ฒํ๋ค. ๊ฐ pixel์ด ASCII ๋ฌธ์๋ก๋ณํ๋์์๋
2 18 @ &
18 37 & %
์๊ฐ๋ค. ์ฐธ๊ณ ๋ก๊ทธ๋ฆผ1์ ASCII art๋ classic::mapper๋ฅผํตํด๊ทธ๋ ค์ง๊ฒฐ๊ณผ๋ค.
char iclassic::mapper(int, int)
iclassic์ inverted classic์์ฝ์๋ค. iclassic::mapper๋์ฌ์ฉ๋๋ ASCII๋ฌธ์์์์๋ฅผ๋ฐ๋๋ก์ฌ์ฉํ
๊ฒ์ธ์ classic::mapper์๋ชจ๋ logic์ด๋์ผํ๋ค. ์๋ฅผ๋ค์ด์ โ โ๊ฐ [0, 16]์์ปค๋ฒํ๊ณ โ@โ๊ฐ [238, 255]๋ฅผ์ปค๋ฒํ๋ค.
char sobelx::mapper(int, int)
sobel operation์์์์์ edge์ฑ๋ถ์๊ฒ์ถํ ๋์ฌ์ฉ๋๋์ฐ์ฐ์ด๋ค. ๋ณธ๊ณผ์ ์์ sobelx::mapper๋ ์์์ pixel์์ x์ถ์์๋ฐฉํฅ์ผ๋ก์ธ์ ํ pixel๊ณผ์์ฐจ์ด๊ฐ 50์ด์์ธ๊ฒฝ์ฐ โ|โ๋ฅผ, ๊ทธ๋ ์ง์์๊ฒฝ์ฐ ๊ณต๋ฐฑ๋ฌธ์ โ โ๋ฅผ๋ฆฌํดํ๋ค. ์๋ฅผ๋ค์ด์
100 160 120 |
100 30 100 | |
100 100 170 |
์๊ฐ์ด์ผ์ชฝ์ pixel ๊ฐ์๋ํด์์ค๋ฅธ์ชฝ๊ฐ์ ASCII ๋ฌธ์๊ฐ๊ทธ๋ ค์ง๋ค.
char sobely::mapper(int, int)
sobelx์์์ฌ์ฉ๋ logic๊ณผ๋๊ฐ์ง์ธ๋ถ์ฌํญ์ด๋ค๋ฅด๋ค. ๋จผ์ x์ถ์ด์๋ y์ถ์๋ฐฉํฅ์๊ณ ๋ คํ๋ค. ๊ทธ๋ฆฌ๊ณ
๋ฆฌํด๋๋๋ฌธ์๊ฐ โ|โ๊ฐ์๋ โ-โ์ด๋ค.
char gradient::mapper(int, int)
gradient::mapper๋ sobelx::mapper์ sobely::mapper์ logic์๊ทธ๋๋ก๋ฐ์ํ๋ค. ์ถ๊ฐ์ ์ผ๋ก x,y์ถ
์์๋ฐฉํฅ๋ชจ๋์ธ์ ํ pixel๊ณผ์์ฐจ์ด๊ฐ 50์ด์์ธ๊ฒฝ์ฐ โ+โ๋ฅผ๋ฆฌํดํ๋ค. ์๋ฅผ๋ค์ด์
100 160 120 | –
100 30 100 | + –
100 100 170 |
์๊ฐ์ด์ผ์ชฝ์ pixel ๊ฐ์ด์ค๋ฅธ์ชฝ๊ณผ๊ฐ์ ASCII ๋ฌธ์๋ก๊ทธ๋ ค์ง๋ค.
drawer(artist *)
drawer class๋ artist๊ฐ๊ฐ๋ method๋ฅผ์ฌ์ฉํด์์ต์ข
์ ์ผ๋ก๊ทธ๋ ค์ง๋ string์๋ง๋ค์ด๋ธ๋ค. ๋ฐ๋ผ์
drawer ์์ฑ์๋์ฒซ๋ฒ์งธ์ธ์๋ก artist pointer instance๋ฅผ๋ฐ๋๋ค.
string drawer::draw()
์ต์ข
ASCII ๋ฌธ์๋ก๊ตฌ์ฑ๋๊ทธ๋ฆผ์ํ๋์ string์ผ๋ก๋ฆฌํดํ๋ค.
string downsample::draw()
upsample๊ณผ downsample์์ด๋ฏธ์งํฌ๊ธฐ๋ฅผํค์ฐ๊ณ ์ค์ด๋๋ฐ์ฌ์ฉ๋๋๋ฐฉ๋ฒ์ด๋ค. ๋ณธ๊ณผ์ ์์๋
Nearest-neighbor ๊ธฐ๋ฐ์ upsample๊ณผ downsample์ downsample::draw์ upsample::draw๋ฅผํตํด์ ๋ชจ๋ฐฉํ๋ค.
downsample::draw()๋ drawer::draw()๋ก๊ทธ๋ ค์ง๋๊ทธ๋ฆผ์ํฌ๊ธฐ๋ฅผ์ ๋ฐ์ผ๋ก์ค์ธ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก์ขํ (0,
0)์๋ฐ๋์๊ทธ๋ ค์ง๊ณ , ํด๋น์ขํ๋ฅผ๊ธฐ์ค์ผ๋กํ์๊ฐ์๊ฐ๋์ขํ์๋ฌธ์๋ค์๋ฌด์๋๋ค. ์์๋
์๊ฐ์ผ๋ฉฐ์ผ์ชฝ์ด์๋ณธ์ด๊ณ ์ค๋ฅธ์ชฝ์ด downsample ๊ฒฐ๊ณผ๋ค.
string upsample::draw()
downsample::draw()์๋ฐ๋๋ก๊ทธ๋ฆผ์ํฌ๊ธฐ๋ฅผ๋๋ฐฐ๋กํค์ด๋ค. ํค์ฐ๋๊ณผ์ ์์๊ฐ๋ฌธ์๋ฅผ๋ฐ๋ณตํ๋ค. ์์๋
์๊ฐ์ผ๋ฉฐ์ผ์ชฝ์ด์๋ณธ์ด๊ณ ์ค๋ฅธ์ชฝ์ด upsapmle ๊ฒฐ๊ณผ๋ค.
scale(artist *, int, int)
scale class์์์ฑ์๋์์ธ์ ์ผ๋ก artist*์ธ์์ถ๊ฐ์ ์ธ๋๊ฐ์ int ์ธ์๋ฅผ๋ฐ๋๋ค. ๋ int ์ธ์๋๊ฐ๊ฐ x, y์ถ์ผ๋กํ์ฅ๋ฐ์ถ์๋ ๊ฐ์์๋ฏธํ๋ค. ์ด๊ฒฝ์ฐ์์ธ์ ์ผ๋ก config ํ์ผ์ 2๊ฐ๊ฐ์๋ 4๊ฐ์์ ๋ณด๊ฐ ํฌํจ๋์ด์ผํ๋ฉฐ 3,4 ๋ฒ์งธ์ ๋ณด๊ฐํด๋น scale ์์ฑ์์์ธ์๋ก๋ค์ด๊ฐ๋ค. ํด๋น๋ด์ฉ์ main ํจ์์์ด๋ฏธ ์์ฑ๋์ด์๋ค.
string scale::draw()
downsample::draw()์ upsample::draw()์ด์ถ์๊ตฌ๋ถํ์ง์๊ณ ๋จ์ํ 2๋ฐฐํ์ฅ๋ฐ์ถ์๋ฅผํ๋ค๋ฉด, scale::draw()๋๊ฐ์ถ์๋ํด์์ ํด์ง๋ฐฐ์จ์ํ์ฅ์ถ์๋ฅผ์ํํ๋ค. ๋ฐฐ์จ์ด์์ฐ์์ธ๊ฒฝ์ฐํด๋น๊ฐ์ ๋ฐฐ์จ๋ก๊ทธ๋ฆผ์ํ์ฅํ๋ค. ๋ฐฐ์จ์ด์์์ ์์ธ๊ฒฝ์ฐํด๋น๊ฐ์์์์ญ์๋ฅผ๋ฐฐ์จ๋ก์ฌ์ฉํ๋ค. ๋ง์ง๋ง์ผ๋ก 0 ์ธ๊ฒฝ์ฐ๋ํ์ฉํ์ง์๋๋ค. ์๋ฅผ๋ค์ด์ x์ถ๊ณผ y์ถ๋ฐฐ์จ์ด 3, -2 ์ธ๊ฒฝ์ฐ x์ถ์ผ๋ก 3๋ฐฐ, y ์ถ์ผ๋ก 1/2๋ฐฐ ํ์ฅ๋ฐ์ถ์ํ๋ค. ์๋์ด์ด์ง๋์์๋ํ๋ก๊ทธ๋จ์ input๊ณผ์ด์๋์๋๋ output์์๋ค์ด๋ค.
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
@@@@%%%WWXXXHHHOOTTT***++—….
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
….—++***TTTOOHHHXXXWW%%%@@@@
output using input1.txt and confit1.txt
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@&^–+^..^.HHX@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@*–…–.–. .+.*^^^+-@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@.-^.-…-++^^-.+.-+-.—.-.@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&-.*…… ….. ..+… …+.+.@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@…-..-..-+.. …………+…….-@@@@@@@@@@@@@@@@
@@@@@@@@@@@@…..^HAXXXXAH*.+-^*++-+^*TOHO^……&@@@@@@@@@@@@@@
@@@@@@@@@@@-..-*HAAXXXXWXWWWXWWWWWWWXWXXXAHHO^..-+%@@@@@@@@@@@@@
@@@@@@@@@@….*OHAXXXWXW%%%%%&&&&&%%%WWWXXAHHAH+…@@@@@@@@@@@@@
@@@@@@@@@@-..+HHAAXXWW%&&&&&&&&&&&&&%%WWXXAAHOOH^…@@@@@@@@@@@@
@@@@@@@@@T-..HOOHAXXW%%%%%&&&&&&&&&&%%WWXAHAHHHHA..^@@@@@@@@@@@@
@@@@@@@@@+.-+HOHHAXWW%%%%%%&@&&@&&&%%%WXXAHHHOHHA-+^@@@@@@@@@@@@
@@@@@@@@@+..+AHHAAXWWWWW%%%%&&&&&&%%%WWXAAHHOOOHXT.*@@@@@@@@@@@@
@@@@@@@@@^…*AHOAXWXWW%%%%&%%%%%%%WWWXXAHHOOTOAW+-^@@@@@@@@@@@@
@@@@@@@@@@-.^*OTOAXXWWWWWW%WWWWWXWWWXXAAAHHOTOHXHT-+@@@@@@@@@@@@
@@@@@@@@@@T.-OXX*+—–..-^HXXAAAH*.-……-^AW%T.+@@@@@@@@@@@@@
@@@@@@@@@@&..X%%OTOHT—+^^*OHHHT-+-+-+-++^^O%&X-.A@@@@@@@@@@@@@
@@@@@@@@@@X+**&WT^..A-. *HT*TWWX^.**W….O+.+H%*+^A*@@@@@@@@@@@@
@@@@@@@@@@@HX+@WAXWWXW%%WX%WXW%X**THHXWXXXAAHAW^HO-%@@@@@@@@@@@@
@@@@@@@@@@@AAO&%AAXXWWWXXWXXX%%XT*OHAXXXWWWXAHW^-WH@@@@@@@@@@@@@
@@@@@@@@@@@&X%&%WAHAAXXXXAXXX%%WO^*THAXXXXXXHH%*+H&@@@@@@@@@@@@@
@@@@@@@@@@@@%%X@WHHHHAXXXWAXAW%WX^TOHAAAAHHOOAWTHA@@@@@@@@@@@@@@
@@@@@@@@@@@@@AX%WOHOHAAXAHXAAW%WHAT*HAHHHHOTOXX*O@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@WHHHHAAXWWWXHO^^+-^TOHHHOOTOAX@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@HHHHAXXXXXWXXHAOOTOOOOOOOOHW@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@AHHHHAAXWWO**HT*^THOOHOOOAX@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@XOOHOAXXXWAXXXHHHTOAAAHTHTO@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@WOT^OOOAHHOT*^^*TOHHOOOOTTO@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@%AO*^-*OHHAAHAAAAAHOT****OH@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@AXAO*^^++*OTOTOTT^^^^^^TOHA@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@HXWWAHOT^+++++^^+++^^^*TOHHAX@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@OAAWWXXAHOO*^++^+++^^**TOOHHHXXA@@@@@@@@@@@@@@@@@
output using input2.txt and confit2.txt
์ต์ข
์ ์ผ๋กํ์ด์ผํ๋๋ฌธ์ ๋์๋์๊ฐ๋ค. ๋ฌธ์ 1,2,3์์ฝ๋๊ตฌํ๋ฌธ์ ๋ก test case๋ฅผํตํด์์ฑ์ ๋๊ณ , ๋ฌธ์ 4,5๋๋ณด๊ณ ์์์์ฑํ๋ค.
๋ฌธ์ 1> parser ํด๋์ค๋ฅผ๊ตฌํํ๋ผ
๋ฌธ์ 2> artist class ๋ฐ artist๋ฅผ์์๋ฐ๋ class ๊ทธ๋ฆฌ๊ณ drawer class๋ฅผ๊ตฌํํ๋ผ ๋ฌธ์ 3> drawer class๋ฅผ์์๋ฐ๋ class๋ค์๊ตฌํํ๋ผ ๋ฌธ์ 4> drawer ์์ฑ์๊ฐ artist๊ฐ์๋ artist*๋ฅผ์ธ์๋ก๋ฐ๋์ด์ ๋ฅผ์ค๋ช
ํ๋ผ (๋ณด๊ณ ์์์์ฑ) ๋ฌธ์ 5> artist ํด๋์ค๋ฅผ์์๋ฐ์์์์ ๋ง์ style์์ ์ํ๊ณ ๊ทธ๋ฆผ์์ถ๋ ฅํ๋ผ (๋ณด๊ณ ์์์์ฑ) ๋ฌธ์ 6> ์ ์๋ํด๋์ค๋ค์๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ๊ด์ ์์๊ฐ์ ํ ์์๋ค๋ฉด์ด๋ค์ ์๋๊ฐ์ ํ ์ ์์์งํ ์ํ๋ผ (๋ณด๊ณ ์์์์ฑ)




Reviews
There are no reviews yet.