– Templates & STL –
μ£Όμ μ¬ν
β ν΄λμ€ μ μΈ λ° μ μλ₯Ό main.cpp νμΌμ μμ±νλ κ²μ κΈμ§ν©λλ€. κ·Έ μΈμ μ μΈ λ° μ μμ μμΉμ λν μ μ½μ μμ΅λλ€.
β STL μ¬μ©μ΄ κ°λ₯ν©λλ€.
β λͺ¨λ C++ λ¬Έλ²μ΄ μ¬μ© κ°λ₯ν©λλ€.
β λ¬Έμ μμ μ 곡ν νμμ μ€μν΄μΌ ν©λλ€.
β λ¬Έμ μ λͺ
μλμ΄ μμ§ μλλΌλ μλ©Έμ(Destructor)μ κ°μ λ©λͺ¨λ¦¬ λμ λ°©μ§λ₯Ό μν΄ νμν λ©€λ²ν¨μλ νμμ μΌλ‘ ꡬνλμ΄μΌ ν©λλ€.
β κ° λ¬Έμ λ³ μΆκ°μ μΈ μΈλΆ 쑰건μ λ§μ‘±νμ¬μΌ ν©λλ€.
β λ¬Έμ μ‘°κ±΄μ΄ λ³΅μ‘ν©λλ€. λͺ¨λ λ¬Έμ μ μΈλΆ 쑰건μ κΌΌκΌΌν μ½μ΄ 보μκΈ° λ°λλλ€.
κ°μ
β μ μΆ κΈ°νμμ ν루(24μκ°) λ¦μ λλ§λ€ 20%μ© κ°μ
β 1μΌ(20%) , 2μΌ(40%), β¦ 5μΌ(100%)
β μ»΄νμΌμ΄ μ μμ μΌλ‘ μ΄λ£¨μ΄μ§μ§ μμ κ²½μ° 0μ
μ μΆλ°©μ
κ³΅ν΅ μ±μ κΈ°μ€
1. νλ‘κ·Έλ¨ κΈ°λ₯
β νλ‘κ·Έλ¨μ΄ μꡬ μ¬νμ λͺ¨λ λ§μ‘±νλ©΄μ μ¬λ°λ‘ μ€νλλκ°?
2. νλ‘κ·Έλ¨ μ€κ³ λ° κ΅¬ν
β μꡬ μ¬νμ λ§μ‘±νκΈ° μν λ³μ λ° μκ³ λ¦¬μ¦ μ€κ³κ° μ λμλκ°?
β λ¬Έμ μμ μ μλ μΈλΆ 쑰건μ λͺ¨λ λ§μ‘±νμλκ°?
β μ€κ³λ λ΄μ©μ΄ μꡬλ μΈμ΄λ₯Ό μ΄μ©νμ¬ μ μ ν ꡬνλμλκ°?
3. νλ‘κ·Έλ¨ κ°λ
μ±
β νλ‘κ·Έλ¨μ΄ μ½κΈ° μ½κ³ μ΄ν΄νκΈ° μ½κ² μμ±λμλκ°?
β λ³μ λͺ
μ΄ λ¬΄μμ μλ―Ένλμ§ μ΄ν΄νκΈ° μ¬μ΄κ°?
β νλ‘κ·Έλ¨μ μμ€ μ½λλ₯Ό μ΄ν΄νκΈ° μ½λλ‘ μ£Όμμ μ λΆμλκ°?
4. λ³΄κ³ μ κ΅¬μ± λ° λ΄μ©, μμ
β λ³΄κ³ μλ μ μ ν λ΄μ©μΌλ‘ μ΄ν΄νκΈ° μ½κ³ 보기 μ’κ² μ μμ±λμλκ°?
β λ³΄κ³ μμ μμμ μ λ°λλκ°?
λ€λ₯Έμ¬λμνλ‘κ·Έλ¨μ΄λμΈν°λ·μμλνλ‘κ·Έλ¨μ볡μ¬(copy)νκ±°λκ°λ¨νμμ ν΄μμ μΆνλ©΄ νμ μ무쑰건 βFβκ°λ©λλ€. μ΄λ¬νλΆμ νμκ°λ°κ²¬λλ©΄νκ³Όμμμ νκΈ°μ€μλ°λΌμΆκ°μ μΈλΆμ΄μ΅μ΄ μμ μ μμ΅λλ€.
SimpleGeoWorld
λ³Έκ³Όμ βSimpleGeoWorldβλκΈ°ν(geometry) κ°μ²΄λ€μμ μνκ³ μ΄μκ΄λ ¨λκ°λ¨νκΈ°λ₯λ€μꡬνν΄
보면μ template λ¬Έλ² μ¬μ©μ μΉμν΄μ§λ κ²μ λͺ©μ μΌλ‘ νλ€.
ν΄κ²°ν λ¬Έμ λ ν¬κ² λ κ°μ§λ€.
1. pointμ rectangleμ standard output(μ΄ν stdout)μΌλ‘ νν
2. μμμ λ rectangle μ¬μ΄μ κ΄κ³λ₯Ό μΆμ νλ ν¨μ μμ±
λ¬Έμ ν΄κ²°μμν΄μ¬μ©λλ classμ class μ¬μ΄μμμκ΄κ³λμλκ·Έλ¦Ό 1κ³Όκ°λ€. νμ΄νλμμμ
μλ―Ένκ³ λ°©ν₯νμκ°μλ classκ°λΆλͺ¨ classλ€. β<…>βλ templateμΌλ‘μ μλ classλ₯Όμλ―Ένλ€. ν¨μμ μΈμκ° β(…)βμΌλ‘ νκΈ°λ κ²μ μ½λ μμ±μκ° νμν νμμΌλ‘ μ μ ν μ μμμ μλ―Ένλ€.
[ κ·Έλ¦Ό1. Class diagram ]
νλ‘κ·Έλ¨μ ꡬνμ μλμ κ°μ μ μ½μ¬νλ€μ΄ λ°λ₯Έλ€.
β κ·Έλ¦Ό1μ λͺ
μλ λ©€λ²λ³μ λ° ν¨μλ λ°λμ ꡬνλκ³ μ¬μ©λμ΄μΌ νλ€.
β κ·Έλ¦Ό1μ λͺ
μλ λ©€λ²ν¨μμ μΈμμ return typeμ΄ μ€μλμ΄μΌ νλ€.
β κ·Έλ¦Ό1μ λͺ
μλ classμΈμ λ€λ₯Έ classλ₯Ό μ μν΄μ μ¬μ©ν μ μλ€.
β μ 곡λ νμΌμ μ μλ ν¨μ(function)μΈμ ν¨μλ₯Ό μ μν΄μ μ¬μ©ν μ μλ€.
β class diagramμλͺ
μλλ©€λ²ν¨μ(method)μλ©€λ²λ³μμΈμλνμννΉμνμμ μΈλ©€λ²λ³μ λ° λ©€λ²ν¨μλ₯Ό μμ λ‘κ² μΆκ°ν μ μλ€.
κ·Έλ¦Ό 1μ ννλ κ° ν΄λμ€μ λν μμΈν μ€λͺ
μ μλμ κ°λ€.
geometry
β λͺ¨λ geometry κ΅¬μ± μμλ€μ abstract class
β void draw2canvas(…)
β canvasμ instanceκ° geometryλ₯Ό 그릴 λ μ¬μ©λλ€.
β μΈμ(argument)νμμ λ¬Έμ μμ±μκ° νμν λλ‘ μ μνλ€.
point<T, int N>
β ν¬μΈνΈ classλ‘ Tλ μ¬μ©λ numeric type, Nμ coordinate dimensionμ μλ―Ένλ€
β μλ‘, Nμ΄ 2λ©΄ 2μ°¨μ point, 3μ΄λ©΄ 3μ°¨μ pointκ° λλ€.
β point<T, int N>(const T* coords)
β point classμ μμ±μμ΄λ©° Nκ°μ Tκ°μΌλ‘ μ΄κΈ°ν λλ€.
rectangle<T>
β 2μ°¨μ νλ©΄μ κ°μ ν μ¬κ°ν ν΄λμ€
β μ§κ°μ¬κ°ν, κ° λ³μ΄ x,yμΆκ³Ό ννμ κ°μ νλ€.
β rectangle<T>(T, T, T, T)
β μλκ·Έλ¦Όκ³Όκ°μ΄μ¬κ°νμλμ μμ’νλ‘μ μλ μμλ€. κ°κ°μμΈμλμμλλ‘
x_1, y_1, x_2, y_2μ ν΄λΉνλ€.
β μ¬κ°νμλ©΄μ μ΄ 0μ΄λλλ‘μΈμκ°μ£Όμ΄μ§κ²½μ° βthrowβ ν€μλλ₯Όν΅ν΄μνλ‘κ·Έλ¨μ
failμν¨λ€.
β bool is_equal(const rectangle<T>& other)
β λ©€λ²ν¨μλ₯Ό νΈμΆνλ instanceμ otherμ΄ μ νν 4κ°μ pointλ₯Ό 곡μ νλ κ²½μ° true,
κ·Έλ μ§ μμ κ²½μ° false
β bool is_intersect(const rectangle<T>& other)
β λ©€λ²ν¨μλ₯Ό νΈμΆνλ instanceμ otherμ΄ equalμ΄ μλλ©΄μ μμμ΄ κ²ΉμΉλ κ²½μ° true, κ·Έλ μ§ μμ κ²½μ° false (μλ μμ)
β bool is_line_overlap(const rectangle<T>& other)
β λ©€λ²ν¨μλ₯Ό νΈμΆνλ instanceμ otherμ΄ equal λ° intersectκ° μλλ©΄μ ν λ³μ
곡μ νλ κ²½μ° true, κ·Έλ μ§ μμ κ²½μ° false(μλ μμ)
β bool is_point_match(const rectangle<T>& other)
β λ©€λ²ν¨μλ₯Ό νΈμΆνλ instanceμ otherμ΄ intersectκ° μλλ©΄μ μ€μ§ ν μ μ 곡μ νλ κ²½μ° true, κ·Έλ μ§ μμ κ²½μ° false (μλ μμ)
β bool is_disjoint(const rectangle<T>& other)
β λ©€λ²ν¨μλ₯Ό νΈμΆνλ instanceμ otherμ΄ λ§λμ§ μλ κ²½μ° true, κ·Έλ μ§ μμ κ²½μ° false
(μλ μμ)
canvas2d
β STL vectorλ₯Ό μμ λ°μ ꡬνλλ©° 보μ ν κ°μ²΄λ₯Ό stdoutμΌλ‘ κ·Έλ €λ΄λ class
β canvas2d(int width, int height, char c_empty)
β width: canvasμ ν
β height: canvasμ λμ΄
β λΉ κ³΅κ°μ ννν κΈμ(char)
β void draw2stdout()
β 보μ ν κ°μ²΄λ₯Ό stdoutμΌλ‘ μΆλ ₯
canvas2d c(5, 3, β.β);
c.draw2stdout();
canvas2d c(3, 5, β@β);
c.draw2stdout();
[ codeμ stdout μμ ]
parser
β stringμ λ°μ κ°μ²΄μ instanceλ₯Ό μμ±νλ κΈ°λ₯μ μ 곡νλ class
β canvas2d parse_canvas(const std::string& line)
parser p;
canvas2d c = p.parse_canvas(β5,3,@β);
c.draw2stdout();
[ codeμ stdout μμ ]
β geometry* parse_geometry(const std::string& line)
parser p;
canvas2d c = p.parse_canvas(β5,3,.β); geometry* g = p.parse_geometry(βpoint,int,1,2β);
c.push_back(g);
c.draw2stdout();
[ codeμ stdout μμ ]
본격μ μΈ λ¬Έμ μ€λͺ
μ μμμ μλμ κ°μ 쑰건 λ° κ°μ μ΄ μλ€.
β templateμ μ¬μ©λλ typeμ intμ floatμΌλ‘ κ°μ νλ€.
β λ¬Έμ 1κ³Ό λ¬Έμ 2λ μ±μ μ stdinκ³Ό stdoutμΌλ‘ μ§νλλ€. (input λ° outputνμΌμ μ¬μ©νμ§ μλλ€)
β λ¬Έμ 3μ λ ν¬νΈμ μμ±νλ€.
β μλ μ£Όμ΄μ§ int main() ν¨μμ void print_relation(rectangle<T>, rectangle<T>) ν¨μλ μ λλ‘ μμ νλ©΄ μλλ€.
template<typename T>
void print_relation(rectangle<T> r1, rectangle<T> r2)
{
bool a1 = r1.is_equal(r2); bool a2 = r1.is_intersect(r2); bool a3 = r1.is_line_overlap(r2); bool a4 = r1.is_point_match(r2); bool a5 = r1.is_disjoint(r2);
std::cout
<< a1 << “,” << a2 << “,” << a3 << “,” << a4 << “,”
<< a5 << std::endl;
}
int main()
{ std::string p_type; std::cin >> p_type;
// Solve problem 1 if (p_type == “problem1”)
{ std::string line; parser parser; std::cin >> line;
canvas2d canvas = parser.parse_canvas(line);
while (std::cin >> line) { geometry* geo = parser.parse_geometry(line); canvas.push_back(geo);
}
canvas.draw2stdout();
}
// Solve problem 2
else if (p_type == “problem2”)
{ std::string line; while (std::cin >> line)
{ std::stringstream ss(line); std::string type; std::getline(ss, type, ‘,’);
if (type == “int”)
{ std::vector<int> vals; while (ss.good())
{ getline(ss, type, ‘,’);
vals.push_back(std::stoi(type));
}
rectangle<int> rec1(vals[0], vals[1], vals[2], vals[3]); rectangle<int> rec2(vals[4], vals[5], vals[6], vals[7]); print_relation<int>(rec1, rec2);
}
else if (type == “float”)
{ std::vector<float> vals; while (ss.good())
{ getline(ss, type, ‘,’);
vals.push_back(std::stof(type));
}
rectangle<float> rec1(vals[0], vals[1], vals[2], vals[3]); rectangle<float> rec2(vals[4], vals[5], vals[6], vals[7]); print_relation<float>(rec1, rec2);
}
else throw;
}
}
else throw; return 0;
}
λ¬Έμ 1> canvas2d instanceμ draw2stdout() ν¨μλ₯Ό μ¬μ©νμ¬ geometry instanceλ€μ μ μ νκ² κ·Έλ¦¬μμ€.
κ·Έλ¦Ό1μ²λΌ, canvas2d classλ std::vector<geometry*>λ₯Όμμλ°μꡬνλλ©° geometry* instanceλ€μ κ°λ containerλ‘λ³Όμμλ€. ν΄λΉν΄λμ€μ canvas2d instanceλ draw2stdout() ν¨μλ₯ΌνΈμΆν΄μ
μμ μ΄ κ°λ geometry instanceλ€μ stdoutμΌλ‘ κ·Έλ €λΈλ€.
λ¬Έμ μ μ
μΆλ ₯(stdin, stdout)μ λν μ€λͺ
μ μλμ κ°λ€.
μ
λ ₯ line 1
β νκ³ μ νλ λ¬Έμ λ₯Ό βproblem1βμΌλ‘ λͺ
μνλ€. ν΄λΉ κ³Όμ λ λ λ¬Έμ λ₯Ό μ μνκ³ μκΈ° λλ¬Έμ λ¬Έμ μ¬μ΄μ ꡬλΆμ΄ νμνλ€.
μ
λ ₯ line 2
β μ΄κΈ°νλ canvas2d μΈμ€ν΄μ€μ μΈμλ₯Ό μλ―Ένλ€. β,βλ‘ κ΅¬λΆλ 첫 λ²μ§Έ κ°μ canvasμ ν(width),
λ λ²μ§Έ κ°μ λμ΄(height), μΈ λ²μ§Έ κ°μ λΉκ³΅κ°μ νμν κΈμ(char)λ₯Ό μλ―Ένλ€.
β canvas2d(width, height, c_empty) μ
λ ₯ line 3 ~ <EOF>
β μΈ λ²μ§Έ μ€λΆν°λ μμ±λ geometry instanceμ λͺ
μΈκ° νμλλ€. 첫 λ²μ§Έ κ°μ class μ΄λ¦, λ
λ²μ§Έ κ°μ templete type, κ·Έ μ΄ν κ°μ μμ±μ νΈμΆμ μ¬μ©λλ μΈμλ₯Ό μλ―Ένλ€.
problem1
5,4,.
point,int,2,3 point,int,0,0
[ stdin | stdout μμ ]
κ°κ°μ geometryμ λν νν λ°©λ²μ μλμ κ°λ€.
β 2μ°¨μ pointλν΄λΉλλμμΉμμ«μ 1μ΄νμλλ€. μ¬κΈ°μν΄λΉλλμμΉλ첫λ²μ§Έμ°¨μμ μ«μλ₯Ό xμ’νλλ²μ§Έμ°¨μμμ«μλ₯Ό yμ’νλ‘보μμλμμΉλ€. λν x μΆμμΌμͺ½μμμ€λ₯Έμͺ½,
yμΆμ μμμ μλ λ°©ν₯μΌλ‘ κ°μ νλ€.
problem1
5,4,.
point,int,2,3
[ point stdin | stdout μμ ]
3μ°¨μ point λ ν΄λΉλλ μμΉμ μΈ λ²μ§Έ μ°¨μ κ°μ΄ νμλλ€.
problem1
5,4,.
point,int,2,3,6
[ point stdin | stdout μμ ]
β 4μ°¨μ μ΄μμ point λ ν΄λΉλλ μμΉμ μΈ λ²μ§Έ μ°¨μλΆν° λ μ°¨μ κ°μ λͺ¨λ λν κ°μ΄ νμλλ€.
problem1
5,4,.
point,int,2,3,6,2
[ point stdin | stdout μμ ]
β rectangleμ ν΄λΉλλ μμμ μ«μ 1μ΄ νμλλ€.
problem1
5,4,.
rectangle,int,0,0,1,2
[ rectangle stdin | stdout μμ ]
β canvasμ μμμ΄ κ²Ήμ³μ κ·Έλ €μ§λ κ²½μ° μλμ κ°μ΄ λν΄μ§(+) μ«μκ° νμλλ€.
problem1 30,10,.
point,int,0,1 point,float,3.33,6.23 point,int,0,1,4
point,float,3.33,6.23,2.22 rectangle,int,0,1,4,5
rectangle,float,3.33,6.23,2.22,0.0
[ overlap case stdin | stdout μμ ]
μ’νκ³λμμμμ²λΌμ’μΈ‘μλ¨μ΄ (0,0)μ΄κ³ xμΆκ³Ό yμΆμκ°κ°κ°λ‘μΈλ‘μΆμ΄λ€. μΆκ°μ μΌλ‘μλμκ°μ μ‘°κ±΄μ΄ μλ€.
numeric type T, μ¦ μμμ μ¬μ©λλ datatype T,λ float λλ intλ‘ κ°μ νλ€.
β float typeμ μ’νλ₯Ό stdoutμΌλ‘ 그리λ κ²½μ° μμμ μ΄ν κ°μ λ²λ €μ μ¬μ©νλ€.
β 그릴λ λ§λ€ μμμ μ΄νλ₯Ό λ²λ¦¬μΌ ν©λλ€. μλ₯Ό λ€μ΄μ
point,float,2.0,3.0,1.3 point,float,2.1,3.7,1.7 μμ κ°μ κ²½μ° (2,3)μ 3μ΄ μλ 2κ° νκΈ°λμ΄μΌ ν©λλ€.
β geometry κ°μ²΄κ° μΊλ²μ€ λ²μλ₯Ό λ²μ΄λλ κ²½μ° λ¬΄μνλ€.
β μ«μκ° 10 9μ λμ΄κ°λ©΄ λ€μ 0λΆν° μμλλ€.
β ν΄λΉμ‘°κ±΄μ΄μλνλ°λ 0-9κΉμ§μμ«μλ§μμ¬μ©νλκ²μ
λλ€. μλ₯Όλ€μ΄, ν©μ΄
10μ΄λ©΄ 0μ μΆλ ₯ν΄μΌν©λλ€.
β pointμ μ°¨μμ 2μ΄μ 5 μ΄νλ‘ κ°μ νλ€.
ν΄λΉ λ¬Έμ μ μΈλΆ μ‘°νμ μλμ κ°λ€
β stdinμΌλ‘ λ°μ stringμμ μ μ ν instanceλ₯Ό μμ±ν μ μλλ‘ parser λ©€λ²ν¨μ ꡬν
β κ°κ°μ geometry instanceλ€μ΄ μκΈ° μμ μ μ μ ν κ·Έλ¦Όμ 그리λλ‘ κ΅¬ν
β canvas instanceκ° μ μ ν stdoutμ μΆλ ₯νλλ‘ λ©€λ²ν¨μ ꡬν
β λ€μν stdinμ λν΄μ μ ννκ² λμνλλ‘ κ΅¬ν
λ¬Έμ 2> μ¬κ°ν μ¬μ΄μ κ΄κ³μ μ
μν΄λμ€μ€λͺ
μμκΈ°μ νλ°μκ°μ΄λ rectangle μ¬μ΄μ equal, intersect, line_overlap, point_match, disjoint λΌλλ€μ―κ°μ§κ΄κ³λ₯Όμ€λͺ
νλ€. μ¬κΈ°μλ rectangle μ¬μ΄μκ΄κ³λμνΈλ°°νμ (mutual exclusive)μ΄λ€. μ¦, μμμλ rectangle instanceλμ€μ§νλμκ΄κ³λ‘μ μλμ΄μΌνλ€. μλ₯Όλ€μ΄μ equalκ³Ό λμμ intersectμΌ μ μλ€. ν΄λΉ 쑰건μ λ§μ‘±νλλ‘, μλ λ€μ―κ°μ§ ν¨μλ₯Ό μ ννκ² κ΅¬νν΄μΌνλ€.
β bool rectangle<T>::is_equal(const rectangle<T>& other)
β bool rectangle<T>::is_intersect(const rectangle<T>& other)
β bool rectangle<T>::is_line_overlap(const rectangle<T>& other)
β bool rectangle<T>::is_point_match(const rectangle<T>& other)
β bool rectangle<T>::is_disjoint(const rectangle<T>& other)
λ¬Έμ μ μ
μΆλ ₯μ λν μ€λͺ
μ μλμ κ°λ€.
μ
λ ₯ line 1
β νκ³ μνλ λ¬Έμ λ₯Ό βproblem2βμΌλ‘ λͺ
μνλ€.
μ
λ ₯ line 2~ <EOF>
β,βλ‘ κ΅¬λΆλ 첫 λ²μ§Έ κ°μ rectangle instance μμ±μ μ¬μ©λ datatypeμ΄κ³ μ΄μ΄μ λμ€λ 8κ°μ μ«μλ 2κ°μ rectangle instance μμ±μ μ¬μ©λ κ°μ΄λ€. μ
λ ₯μ λν rectangle instanceμμ± μμλ μλμ κ°λ€.
β int, rec1_x1, rec1_y1, rec1_x2, rec1_y2, rec2_x1, rec2_y1, rec2_x2, rec2_y2
β rectangle<int> rec1(rec1_x1, rec1_y1, rec1_x2, rec1_y2)
β rectangle<int> rec2(rec2_x1, rec2_y1, rec2_x2, rec2_y2)
problem2
int,0,1,2,3,4,5,6,7
float,0.3,1.2,4.3,8.4,2.3,8.4,8.2,8.3
[ stdin μμ ]
μΆλ ₯ line 1~
β βequalβ,βintersectβ,βline_overlapβ,βpoint_matchβ,βdisjointβ μ λν bool κ²°κ³Ό κ°μ μΆλ ₯νλ€.
β λ κ° μ΄μμ νλͺ©μμ true(1)μ΄ λμ€λ©΄ mutual exclusiveκ° μλλ―λ‘ μ€λ΅μ΄λ€.
0,0,0,0,1
0,1,0,0,0
[ stdout μμ ]
λ¬Έμ 3> canvas2d class μ²λΌ STL vectorλ₯Ό μμλ°μλ μμλλ λ¨μ μ κ°λ¨νκ² λ
Όνμμ€.
Appendix
Appendixμλ κ³Όμ μνμ μμ΄μ νμν λΆκ°μ μΈ μ€λͺ
μ΄λ, λΉλλμ μ§λ¬Έμ λν λλ΅μ μμ±ν λ¨λ½μ
λλ€.
<EOF> End Of File
β κ³Όμ μκ°μ΄ stdinμμ
λ ₯μΌλ‘λ°λνλ‘κ·Έλ¨μλ§μκ²½μ° EOFλΌλ signalμν΅ν΄μ
λ ₯μλλ΄κ²
λ©λλ€. EOFλ₯Ό 보λ΄λ keyλ osλ§λ€ λ€λ₯΄κ³ windowμ κ²½μ° ctrl-z, linuxλ ctrl-dλ₯Ό μ¬μ©ν©λλ€. (μ¬κΈ°μ windowμκ²½μ° ctrl-z λλ₯Έν enter κΉμ§λλ¬μΌλμνλκ²½μ°κ°
μμ΅λλ€.)
Visual studio stdin λλ²κ·Έ
β νμΌλ‘λΆν° stringμλΆλ¬μ€μ§μκΈ°λλ¬ΈμνΈλ¦¬νλλ²κΉ
μμν΄μλμκ°μμ€μ μνλ©΄ μ μ©ν©λλ€. λ¨Όμ project ν΄λμμνλ stdin stringμ΄μ ννμΌμμμ±ν©λλ€. μλμμμμλ βinput.txtβλ‘λμ΄μμ΅λλ€. μ¬κΈ°μ project ν΄λλ *.vcxproj νμΌμ΄μλμμΉλ₯Όμλ―Έν©λλ€. κ·Έ νμμ± β λλ²κΉ
β λͺ
λ ΉμΈμμ β< $(ProjectDir){νμΌμ΄λ¦}βμμ€μ νλ©΄λλ²κΉ
λͺ¨λμμ
stdinμΌλ‘ stringμ λΆλ¬μ΅λλ€.
νμΌ μ€ν
β StdinμΌλ‘μ
λ ₯λ°μλμνλνλ‘κ·Έλ¨μνμ΄ννλκ²μ΄λ²κ±°λ‘μΈμμμ΅λλ€. μ΄λ΄λλ stdinμΌλ‘μ
λ ₯λ°μλ΄μ©μ textνμΌλ‘μ μ₯μμΌλκ³ μλμκ°μ΄ cmdμμλμμν€λ©΄ text
νμΌμ λ΄μ©μ΄ stdinμΌλ‘ λ€μ΄κ° λμνκ² λ©λλ€. (μ΄κ²μ 리λ
μμλ λμΌνκ² λμν©λλ€)



