CSED232 – Programming Assignment #3 (Solution)

$ 30.00
Category:

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.

Be the first to review “CSED232 – Programming Assignment #3 (Solution)”

Your email address will not be published. Required fields are marked *