Description
[์๋ด์ฌํญ]
1. ๋ชจ๋ ๋ฌธ์ ๋ C++์ standard ์
์ถ๋ ฅ(i.e. std::cin, std::cout)์ ๊ธฐ๋ณธ์ผ๋ก ํฉ๋๋ค.
2. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ ์ ์ ๊ธฐ์ค์ ์ฑ์ ์ฉ testcase ํต๊ณผ ์ฌ๋ถ์
๋๋ค.
1) ์ฑ์ ์ฉ testcase๋ค์ ์ ์๋ ๋์ผํ์ง ์์ต๋๋ค. ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ธฐ๋ฅ๋ณ ๋์ด๋ ์ ๋ฐ๋ผ ๋ฐฐ์ ์ด ๋ค๋ฆ
๋๋ค.
2) ์ฑ์ ์ฉ testcase๋ ๋น๊ณต๊ฐ์
๋๋ค.
3. ๋ฏธ๋ฆฌ ์ ์๋์ด ์๋ C/C++ library functions and classes๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธ์ ์ผ๋ก limits ํค๋ํ์ผ include๋ ๊ฐ๋ฅํฉ๋๋ค.
[๊ฐ์ ]
1. ์ ์ถ ๊ธฐํ์ด ์ง๋๋ฉด ์ป์ ์ด์ ์ 20% ๊ฐ์
2. ํ๋ฃจ(24์๊ฐ) ๋ฆ์ ๋๋ง๋ค ์ถ๊ฐ 20%์ฉ ๊ฐ์
a. 1์ผ ์ด๋ด: 20% ๊ฐ์ , 2์ผ ์ด๋ด: 40% ๊ฐ์ , 3์ผ ์ด๋ด: 60% ๊ฐ์ , 4์ผ ์ด๋ด 80% ๊ฐ์
b. 4์ผ ์ด์: 0์
3. ์ปดํ์ผ์ด ์ ์์ ์ผ๋ก ๋์ง ์์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ ์ ์ 0์
[์ ์ถ๋ฐฉ์]
์ฑ์ ํ๊ฒฝ์ Windows Visual Studio 2022์
๋๋ค. ํ์ผ์ ์
๋ก๋ํ์ค ๋, ๊ฐ๋ฐํ๊ฒฝ ํ์ผ์ โํ์ผ ์ ์ถโํ์ด์ง์ ์จ ์๋ ๋๋ก ๋ง์ถฐ ์ฌ๋ ค ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ํด๋๋ช
์ ๋ฌธ์ #_ํ๋ฒ(e.g. prob1_20230000) ์ผ๋ก ๋ง๋ค์ด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ํ ๋ฌธ์ ํด๋ ์์ ๊ฐ ๋ฌธ์ ์ ํด๋นํ๋ Report(e.g.
prob1_20230000_report)๋ ์ฒจ๋ถํ์ฌ zipํ์ผ๋ก ์์ถํ ํ ์ ์ถํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ ์ถ ํฌ๋งท์ด ๋ง์ง ์๋ ๊ฒฝ์ฐ ๊ฐ์ ์ด ์์ต๋๋ค.
์ด๋ฒ ๊ณผ์ ์์๋ ์์ค(.cpp) ํ์ผ๊ณผ ํค๋(.h) ํ์ผ์ ๋ถ๋ฆฌํ์ฌ ์์ฑํฉ๋๋ค. ์๋ ๋ฌธ์ ์ ์ ์๋ ๊ตฌ์กฐ์ฒด์ ํจ์๋ ํค๋ ํ์ผ์, ์ค์ ๊ตฌํ์ cpp ํ์ผ์ ๊ตฌ๋ถํด์ ์งํํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์
์ถ๋ ฅ ์์์ ๋ํ๋์๋ ๊ฒ์ฒ๋ผ ์ฑ์ ์ ํค๋ํ์ผ์ importํ์ฌ ์งํ๋ฉ๋๋ค.
์ ์ถ ์ ํ์ผ๋ช
์ ๋ฌธ์ .cpp, ๋ฌธ์ .h๋ก ์ ์ถ ๋ถํ๋๋ฆฝ๋๋ค(e.g., prob1.cpp, prob1.h). header์ cpp ํ์ผ ๋ชจ๋ ์ ์ถ ๋ถํ๋๋ฆฌ๊ณ , ํ
์คํธ ์ ํ์ฉํ ๋ค๋ฅธ ์ฝ๋๋ ์ญ์ ๋ถํ๋๋ฆฝ๋๋ค.
๋ฌธ์ ๋ง๋ค ๋ฐ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ , ๋ฐ๋ก ์์ถํ์ฌ ์ ์ถํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ฆ, ์ด 2๊ฐ์ ํ์ผ ์ ์ ์ถํ์
์ผ ํฉ๋๋ค. ์ ์ถ์ ๋ฐ๋์ PLMS๋ฅผ ํตํด ์ ์ถํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ด๋ฉ์ผ ์ ์ถ์ ๋ฐ์ง ์์ต๋๋ค. ์ ์ถ ๊ธฐํ์ ๊ธฐ์ค์ผ๋ก 4์ผ(4์ 9์ผ 23์ 59๋ถ 59์ด)์ด ๊ฒฝ๊ณผํ ์ดํ์๋ 0์ ์ด๋ฏ๋ก PLMS์์๋ ๊ณผ์ ์ ์ถ ๋ฐ์ง ์์ต๋๋ค.
์ ์ถํ์ผ ์์) prob1_20230000.zip, prob2_20230000.zip
[์ฑ์ ๊ธฐ์ค] 1. ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ โ 50%
1) ํ๋ก๊ทธ๋จ์ด ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ๋ง์กฑํ๋ฉด์ ์ฌ๋ฐ๋ก ์คํ๋๋๊ฐ?
2. ํ๋ก๊ทธ๋จ ์ค๊ณ ๋ฐ ๊ตฌํ โ 35%
1) ์๊ตฌ ์ฌํญ์ ๋ง์กฑํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ(๋ณ์, ํจ์, ์๊ณ ๋ฆฌ์ฆ ๋ฑ) ์ค๊ณ๊ฐ ์ ์ ํ๊ฐ?
2) ๊ฐ ๋ฌธ์ ์์ ์ ์ํ ์ธ๋ถ ์กฐ๊ฑด์ ์ ์์ฌํญ์ ๋ชจ๋ ๋ง์กฑํ์๋๊ฐ?
3) ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ฃผ์ด์ง ํ์์ ๋ง๊ฒ ํ๋ก๊ทธ๋จ์ด ์ ์๋ํ๋๊ฐ?
3. ํ๋ก๊ทธ๋จ ๊ฐ๋
์ฑ โ 5%
1) ํ๋ก๊ทธ๋จ์ด ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑ๋์๋๊ฐ?
2) ๋ณ์ ๋ฐ ํจ์ ๋ช
์ด ๋ฌด์์ ์๋ฏธํ๋์ง ํ์
ํ๊ธฐ ์ฌ์ด๊ฐ?
3) ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๋๋ก ์ฃผ์์ ์ ์์ฑํ์๋๊ฐ?
4. ๋ณด๊ณ ์ ๊ตฌ์ฑ ๋ฐ ๋ด์ฉ, ์์ โ 10%
1) ๋ณด๊ณ ์๋ ์ ์ ํ ๋ด์ฉ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ณ ๋ณด๊ธฐ ์ข๊ฒ ์ ์์ฑ๋์๋๊ฐ?
2) ๋ณด๊ณ ์์ ์์์ ์ ๋ฐ๋๋๊ฐ?
3) ๊ฐ ๋ฌธ์ ์์ ์ ์ํ ์ง๋ฌธ์ด ์๋ค๋ฉด, ๊ทธ์ ๋ํ ๋ต๋ณ์ด ์ถฉ๋ถํ๊ณ ์ ์ ํ๊ฐ?
[์ฃผ์์ฌํญ]
๋ค๋ฅธ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ด๋ ์ธํฐ๋ท ๋ฑ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋จ์ํ ๋ณต์ฌ(copy)ํ๊ฑฐ๋ ์์ ํด์ ์ ์ถ ํ๋ฉด ๋ถ์ ํ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ถ์ ํ์ ์ ๋ฐ ์ โFโ ํ์ ์ ๋ฐ์ ์ ์์ผ๋ฉฐ, ํ๊ณผ์์ ์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ๋ถ์ด์ต์ด ์์ ์ ์์ต๋๋ค.
์ฃผ์์ ์์ฑํ ์ ์์ด๋ก ์์ฑํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. (ํ๊ธ์ฃผ์ ์์ฑ ์ ๋ค๋ฅธ OS์์ ์ปดํ์ผ์ด ์๋๋ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค
๋ฌธ์ 1๋ฒ: OrderedList ๊ตฌํ (๋ฐฐ์ 70 ์ )
[๋ฌธ์ ์ค๋ช
] ์๋ ์ค๋ช
์ ์ฝ๊ณ , ๊ฐ๋จํ list ๊ตฌํ์์ ๋ฐ์ ๋์ด element๋ค์ด ordered ๋์ด์๋ OrderedList๋ฅผ ๊ตฌํํ๋ค. OrderedList๋ struct๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. OrderedList๋ integer value์ ๋ํด์๋ง
๋์ํ๋ค.
[ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ]
– OrderedList์ ์ฃผ์ ๊ธฐ๋ฅ์ผ๋ก๋ element๋ฅผ ์ถ๊ฐํ๊ณ , ์ญ์ ํ๊ณ , element์ ์ ๊ทผํ๊ณ , value๊ฐ
list์ ์กด์ฌํ๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
– ์ค์ํ ๊ธฐ๋ฅ์ผ๋ก๋ ์๋ก์ด element๋ฅผ ์ถ๊ฐํ ๋, increasing order์ ๋ง๋ ์ ์ ํ ์์น์
์ถ๊ฐํด์ผ ํ๋ค.
– ์๋ฅผ ๋ค๋ฉด, โ5โ, โ7โ, โ6โ์ ์์๋ก list์ element๋ฅผ ์ถ๊ฐํ๋ค๋ฉด, list elements๋ค์ โ5โ, โ6โ, โ7โ์
์์๋ก ์ ์ฅ๋์ด์ผ ํ๋ค.
[์ธ๋ถ์กฐ๊ฑด]
1) OrderedList๋ฅผ ๋ํ๋ด๋ struct๋ฅผ ๊ตฌํํ๋ค. OrderedList๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉค๋ฒ๋ณ์๋ฅผ ๊ฐ์ง๋ค.
– int m_size: OrderedList instance์ฌ์ด์ฆ
– Node* head: OrderedList instance์ ์์ node (linked list ํํ์ struct Node ๊ตฌํ ํ์)
2) OrderedList์ element๋ฅผ ์ถ๊ฐํ๋ ํจ์
– void add(OrderedList* ordered, int v);
– void add(OrderedList* ordered, const int* arr, int size);
์ฒซ ๋ฒ์งธ function์ new element v ๋ฅผ increasing order๋ฅผ ์ ์งํ๋ฉด์ list์ ์ถ๊ฐํ๋ค.
๋ ๋ฒ์งธ function์ integer values๋ฅผ ๊ฐ์ง๋ array๋ฅผ ๋ฐ์์ ์ฌ๋ฐ๋ฅธ order๋ฅผ ์ ์งํ๋ฉด์ list์
๊ฐ๋ค์ ์ถ๊ฐํ๋ค.
3) OrderedList์ element๋ฅผ ์ญ์ ํ๋ ํจ์
– void remove(OrderedList* ordered, int index)
ํด๋น function์ ์ฃผ์ด์ง idx ์ ํด๋นํ๋ element๋ฅผ ์ญ์ ํ๋ค
4) ์์ฑ๋ list instance์ element ์๋ฅผ ๋ฐํํ๋ ํจ์
– int size(OrderedList* ordered);
add/remove ํจ์ ๋ด๋ถ์์ m_size๋ฅผ ์ ์ ํ๊ฒ ๋ณ๊ฒฝํด์ฃผ๋ ํํ๋ก ๊ตฌํํ๋ค.
5) ์ฃผ์ด์ง element๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ํจ์
– bool contains(OrderedList* ordered, int v); ์๋ฅผ ๋ค๋ฉด, โ7โ, 6โ, โ5โ๋ฅผ ์์๋๋ก โOrderedList testโ์ ๋ํด์ฃผ์์ ๋, โcontains(&test, 5)โ๋ true๋ฅผ ๋ฐํํ๋ค. โcontains(&test, 10)โ์ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ค.
6) ์ฃผ์ด์ง index ์ element๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ํจ์
– int getValue(OrderedList* ordered, int idx);
์์ฑ๋ OrderedList instance์์ ์ฃผ์ด์ง idx ์ ์์นํ๋ value๋ฅผ ๋ฐํํ๋ค.
Out-of-index ์ ๊ฒฝ์ฐ์๋ minimum integer(i.e., std::numeric_limits<int>::min())์ ๋ฐํํ๋ค(์ด๋ฅผ ์ํด์๋ limits ํค๋ ํ์ผ include ํ์).
[์
์ถ๋ ฅ ์์]
prob1_main.cpp
#include “prob1.h”
#include <iostream>
void simpleTest1(OrderedList* o) {
add(o, 5); add(o, 4); add(o, 3); add(o, 80); add(o, 50);
for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
} std::cout << std::endl;
} void simpleTest2(OrderedList* o) {
int vals[] = { 10, 20, 35, 35, 10 }; add(o, vals, sizeof(vals) / sizeof(int));
for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
} std::cout << std::endl;
} void simpleTest3(OrderedList* o) {
remove(o, 3);
for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
} std::cout << std::endl;
} void simpleTest4(OrderedList* o) {
std::cout << std::boolalpha << contains(o, 20) << std::endl; std::cout << std::boolalpha << contains(o, 40) << std::endl;
} void simpleTest5(OrderedList* o) {
std::cout << size(o) << std::endl;
}
int main()
{
OrderedList orderedList; std::cout << “<<Simple Test 1>>” << std::endl; simpleTest1(&orderedList);
std::cout << “<<Simple Test 2>>” << std::endl; simpleTest2(&orderedList);
std::cout << “<<Simple Test 3>>” << std::endl; simpleTest3(&orderedList);
std::cout << “<<Simple Test 4>>” << std::endl; simpleTest4(&orderedList);
std::cout << “<<Simple Test 5>>” << std::endl; simpleTest5(&orderedList);
return 0;
}
์ถ๋ ฅ ๊ฒฐ๊ณผ
๋ฌธ์ 2๋ฒ: OrderedSet ๊ตฌํ (๋ฐฐ์ 30 ์ )
[๋ฌธ์ ์ค๋ช
] ์๋ ์ค๋ช
์ ์ฝ๊ณ , ๋ฌธ์ 1๋ฒ์ OrderedList์์ ๊ฒน์น๋ element๊ฐ ์๋ ๋ฐ์ ๋ ํํ์ธ OrderedSet์ ๊ตฌํํ๋ค. OrderedSet์ struct๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. ๋ฌธ์ 1๋ฒ๊ณผ ๊ฒน์น๋ ํจ์์ ๋ํด์๋ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ์์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. OrderedSet๋ integer value์ ๋ํด์๋ง ๋์ํ๋ค.
[ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ]
– OrderedSet์ OrderedList์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ค. ์ ์ผํ ๋ค๋ฅธ ์ ์ผ๋ก๋, ๊ฒน์น๋
element๋ฅผ ํ์ฉํ์ง ์๋๋ค.
– ์๋ฅผ ๋ค๋ฉด, โ5โ, โ5โ, โ7โ์ ์์๋ก list์ element๋ฅผ ์ถ๊ฐํ๋ค๋ฉด, list elements๋ค์ โ5โ, โ7โ์
์์๋ก ์ ์ฅ๋์ด์ผ ํ๋ค.
[์ธ๋ถ์กฐ๊ฑด]
1) OrderedSet๋ฅผ ๋ํ๋ด๋ struct๋ฅผ ๊ตฌํํ๋ค. OrderedSet๋ ๋ค์๊ณผ ๊ฐ์ ๋ฉค๋ฒ๋ณ์๋ฅผ ๊ฐ์ง๋ค.
– int m_size: OrderedSet instance์ฌ์ด์ฆ
– Node* head: OrderedSet instance์ ์์ node (linked list ํํ์ struct Node ๊ตฌํ ํ์)
2) OrderedSet์ element๋ฅผ ์ถ๊ฐํ๋ ํจ์
– void add(OrderedSet * ordered, int v);
– void add (OrderedSet * ordered, const int* arr, int size);
์ฒซ ๋ฒ์งธ function์ new element v ๋ฅผ increasing order๋ฅผ ์ ์งํ๋ฉด์ list์ ์ถ๊ฐํ๋ค.
๋ ๋ฒ์งธ function์ integer values๋ฅผ ๊ฐ์ง๋ array๋ฅผ ๋ฐ์์ ์ฌ๋ฐ๋ฅธ order๋ฅผ ์ ์งํ๋ฉด์ list์
๊ฐ๋ค์ ์ถ๊ฐํ๋ค.
์ฃผ์ํด์ผ ํ ์ ์ผ๋ก๋ ๊ฒน์น๋ element๋ ์ถ๊ฐํ์ง ์๋๋ค. (hint: ์ฒซ ๋ฒ์งธ function์ ํ์ฉํ์ฌ ๋ ๋ฒ์งธ function์ ์์ฑํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ function์์๋ง duplication์ ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค.)
3) OrderedSet์ element๋ฅผ ์ญ์ ํ๋ ํจ์
– void remove(OrderedSet * ordered, int index)
ํด๋น function์ ์ฃผ์ด์ง idx ์ ํด๋นํ๋ element๋ฅผ ์ญ์ ํ๋ค
4) ์์ฑ๋ list instance์ element ์๋ฅผ ๋ฐํํ๋ ํจ์
– int size(OrderedSet * ordered);
add/remove ํจ์ ๋ด๋ถ์์ m_size๋ฅผ ์ ์ ํ๊ฒ ๋ณ๊ฒฝํด์ฃผ๋ ํํ๋ก ๊ตฌํํ๋ค.
5) ์ฃผ์ด์ง element๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ํจ์
– bool contains(OrderedSet * ordered, int v); ์๋ฅผ ๋ค๋ฉด, โ7โ, 6โ, โ5โ๋ฅผ ์์๋๋ก โOrderedSet testโ์ ๋ํด์ฃผ์์ ๋, โcontains(&test, 5)โ๋ true๋ฅผ ๋ฐํํ๋ค. โcontains(&test, 10)โ์ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ค.
์ฃผ์ด์ง element ์ธ v ๊ฐ์ด OrderedSet instance์ ๊ฒน์น๋์ง ํ์ธํ๊ธฐ ์ํด add ํจ์ ๋ด๋ถ์์
์ ์ ํ๊ฒ ํ์ฉ ๊ฐ๋ฅํ๋ค.
6) ์ฃผ์ด์ง index ์ element๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ํจ์
– int getValue(OrderedSet * ordered, int idx);
์์ฑ๋ OrderedSet instance์์ ์ฃผ์ด์ง idx ์ ์์นํ๋ value๋ฅผ ๋ฐํํ๋ค.
Out-of-index ์ ๊ฒฝ์ฐ์๋ minimum integer(i.e., std::numeric_limits<int>::min())์ ๋ฐํํ๋ค(์ด๋ฅผ ์ํด์๋ limits ํค๋ ํ์ผ include ํ์).
[์
์ถ๋ ฅ ์์]
prob2_main.cpp
#include “prob2.h”
#include <iostream> void simpleTest1(OrderedSet* o) {
add(o, 5); add(o, 5); add(o, 5); add(o, 4); add(o, 3); for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
}
std::cout << std::endl;
} void simpleTest2(OrderedSet* o) {
int vals[] = { 10, 20, 35, 35, 10 }; add(o, vals, sizeof(vals) / sizeof(int));
for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
}
std::cout << std::endl;
} void simpleTest3(OrderedSet* o) {
remove(o, 3); for (int i = 0; i < o->m_size; ++i) { std::cout << getValue(o, i) << “, “;
}
std::cout << std::endl;
}
void simpleTest4(OrderedSet* o) {
std::cout << std::boolalpha << contains(o, 20) << std::endl; std::cout << std::boolalpha << contains(o, 40) << std::endl;
} void simpleTest5(OrderedSet* o) {
std::cout << size(o) << std::endl;
} int main()
{
OrderedSet orderedSet; std::cout << “<<Simple Test 1>>” << std::endl; simpleTest1(&orderedSet);
std::cout << “<<Simple Test 2>>” << std::endl; simpleTest2(&orderedSet);
std::cout << “<<Simple Test 3>>” << std::endl; simpleTest3(&orderedSet);
std::cout << “<<Simple Test 4>>” << std::endl; simpleTest4(&orderedSet);
std::cout << “<<Simple Test 5>>” << std::endl; simpleTest5(&orderedSet);
return 0;
}
์ถ๋ ฅ ๊ฒฐ๊ณผ




Reviews
There are no reviews yet.