ํฌ๋ํํค ์ ๊ธ 6์ฃผ์ฐจ WIL
C๋ก ๊ตฌํํ๋ ์๋ฃ๊ตฌ์กฐ
์ฌํ๊ป ์ ๊ฐ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ๋ฐฐ์ฐ๊ฒ ๋๋ฆฌ๋ผ๊ณ ๋ ์๊ฐ์ ํ ์ ์ด ์์์ต๋๋ค. ๋๊ตฌ๋ C๋ก ์ง๋ฆฌ๋ผ๊ณ ๋ ์์๋ ๋ชปํด๋ดค์ต๋๋ค. ์ ๊ฒ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ค์ ๋ฆฌ๋ ์ค, ์๋ฐ ๋ฑ ํ์ ์์ ์ฐ์ด๋ ๋ณต์กํ ์๋ฃ๊ตฌ์กฐ์ด๋ค, ์ ๋์ ํฌ๋๋ฌด๋ ํ ์ด๋ฏธ์ง๋ง์ด ์์์ต๋๋ค (์ด๊ฒ BST์ ์ผ์ข ์ด๋ผ๋ ๊ฒ๋ ๋ชฐ๋์ง์).
๊ทธ๋ฐ๋ฐ ๊ฒฐ๊ตญ ์ด๊ฑธ ๊ณต๋ถํ๊ณ , ๊ตฌํํ๊ณ , ํ ์คํธ๊น์ง ๋๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ธ๋ก ํ ๋งํ๋ค๋ ์ ์์ ์ ๋ ๋ ๋ค์ ๋๋์ต๋๋ค. ์ด๋ฒ 6์ฃผ์ฐจ์ ์ ํฌ ์ ๊ธ์ CS:APP ๊ต์ฌ 7,8,9์ฅ, ๊ทธ๋ฆฌ๊ณ C์ธ์ด๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌํํ์์ต๋๋ค. ์ ๋ฒ ์ฃผ ๋ชฉ์์ผ์ ์ฐจ์ฃผ๋ฐ์ ์๊ฐ์ ์ ํฌ๊ฐ ์ผ์ฃผ์ผ๊ฐ ๊ตฌํํด์ผ ํ ๊ณผ์ ๊ฐ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ผ๋ ๊ฒ์ ๋ค์์ ๋, ๊ทธ๋ฆฌ๊ณ ์ ๊ฒ ์ด๋ค ๋ฌผ๊ฑด์ธ์ง ์น์ ํตํด ์ฐพ์์ ๋, ์ด๊ฑธ ์ง์ง๋ก ๋ด๊ฐ ํ ์ ์์๊น๋ผ๋ ์๊ฐ์ด ์์ฐ์ต๋๋ค. ํนํ ์ ํฌ ๊ต์ก๊ณผ์ ํํ์ด์ง์ ์ฌ๋ผ์จ ์๋ ์์ ๋ ํธ์ ์ ํ๋ฉฐ ์ฌ๋ฌ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์ธ์์. ๋ญ๊ฐ์? ์๋ฃ๊ตฌ์กฐ ํ๋์ 70๋ถ ๊ทธ๊ฒ๋ ๋ฐฐ์์ผ๋ก ๊ฒจ์ฐ ๋๋ ๊ฐ์๋ผ๋...
๊ตฌํ์ ๋์งธ ์น๊ณ ์ผ๋จ ํ
์คํธ ์ฝ๋ ๊ตฌ๋๋ถํฐ๊ฐ ํ๋์ ์ฅ๋ฒฝ์ด์์ต๋๋ค. ์ด์ ๊น์ง ๋๋ ธ๋ C ์ฝ๋๋ค์ ์ ๋ถ gcc (์์ค์ฝ๋) -o (์คํํ์ผ๋ช
)
์์ผ๋ก ์
๋ ฅํ๋ฉด ๋๋๋ฐ ์ฌ๊ธฐ์๋ ๊ทธ๊ฒ ๋จนํ์ง ์์์ต๋๋ค.
์ง๊ธ ์๊ฐํด๋ณด๋ฉด CS:APP 7์ฅ (๋ง์ปค)๋ ๋ฐ๋ก ์ด๋ฅผ ์ํ ๊ฒ์ด์์ต๋๋ค. ์ฌํ๊น์ง๋ gcc
์ ๋ํด '์์ค ์ฝ๋๋ฅผ ์คํ ํ์ผ๋ก ๋ณํ์์ผ์ค๋ค' ์ ๋์ ์ ๋งค๋ชจํธํ ์๊ฐ์ ๊ทธ์ณ๋ ๊ด์ฐฎ์์ง๋ง, ์ด๋ฒ RBT ํ๋ก์ ํธ๋ ๊ทธ ์ ๋ ์ดํด๋ก๋ ํ
์คํธ ๊ตฌ๋์กฐ์ฐจ๋ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
๋๋ค.
2021๋
์ด๋ฒ 6์ฃผ์ฐจ๋ฅผ ์์ํ๋ฉด์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ ๊ด๋ จํ์ฌ ํน๋ณํ ๋ฐ์๋ ์ฃผ๋ฌธ์ด ํ๋ ์์์ต๋๋ค. "๋ค ์๊ด์์ผ๋ LLM์ ์ด์ฉํ์ง ๋ง ๊ฒ"์ด์์ต๋๋ค. ๋ง์น 2021๋ ์ฒ๋ผ ๊ฒ์ํ๊ณ , ๊ตฌํํ๊ณ , ๋๋ฒ๊น ํ๋ผ๋ ๊ฒ์ด ์ ํฌ์ ๊ณผ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด์ ์ด๋ ๊ฒ ๋ ๊ฑฐ, ์ต๋ํ ์๋์ฝ๋๋ฅผ ๋ณด์ง ์๊ณ ๊ตฌํํ์๋ ๊ฐ์ธ์ ์ธ ๋ชฉํ๋ ์ธ์ ์ต๋๋ค.
ํฐ ๋ฌธ์ ์ผ์๋ก ์์ ๊ฒ๋ถํฐ
ํ์๋ค๊ณผ ํจ๊ป ์ ๊ฒฝ๋ก๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉฐ ๋ฌด์๋ถํฐ ์์ํด์ผ ํ๋์ง๋ฅผ ๊ณ ๋ฏผํ์ต๋๋ค. ์ฐ์ ์ ํ๋ก์ ํธ ์ต์์์ README.md
๋ฅผ ์ฝ์๊ณ , ๊ฐ .c
ํ์ผ์ ๋ฌด์์ด ๋ค์๋์ง, ๊ทธ ๋ค์์ .h
์ ๋ฌด์์ด ๋ค์๋์ง ๋ณด์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ๊ฐ ํด๋์ ์กด์ฌํ๋ Makefile๋ถํฐ ๊ณต๋ถํด์ผ ํจ์ ์๊ฒ ๋์๊ณ , ์ดํ src์ test ํด๋๋ด .c
์ .h
ํ์ผ๋ค์ด ์ ๋ถ ๋ค ์์กด์ฑ ์์์ ๋ง์ถ์ด ์ปดํ์ผ๋์ด์ผ๋ง ํ๋ค๋ ๋ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ํ ๋ช
๋ น์ด์ธ make
๋ฅผ ๊ณต๋ถํ ์ ์์์ต๋๋ค. ์ด๋ก์จ ํ
์คํธ ์ฝ๋ ๊ตฌ๋์ ์ํ ๋ง์ง๋ง ํผ์ฆ์ธ make -C
๋ช
๋ น์ด๋ฅผ ์ป์ด๋ด์๊ณ , ์ฒซ ๊ตฌ๋์ ์ฑ๊ณตํ์ต๋๋ค.
ํ ์คํธ ๊ตฌ๋์๋ ์ฑ๊ณตํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ๊ทธ๊ฒ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ์ง์ฃผ์ง๋ ์์์ต๋๋ค. ์ ๋์์ ๊ฐ์๋ ํ์์ด ๊ธธ์๊ณ , ๋ฐฐ์ํธ์ง๋ณธ์ธ์ง ๋ง์ด ์์ฒญ๋๊ฒ ๋น ๋ฅด๊ณ , ์ง์ค์ ํ๋ค์์ต๋๋ค.
์ฑ
๊ทธ๋ฐ ์ ํฌ๋ฅผ ๊ตฌํด์ค ๊ฒ์ ์์ธ๋ก ์ฑ ์ด์์ต๋๋ค. ์ธ์์ ๋ค์์ ๋ฃ๋ ๊ฐ์๋ฅผ ๋๊ณ ์ ์ฑ ์ ํด ๋ ๋-๋ธ๋ ํธ๋ฆฌ ์ฑํฐ์ ๊ธ์ ์ฝ์ผ๋ฉฐ, ์ ๋ ๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ๋ํ์ฌ ์ดํดํ๊ธฐ ์์ํ์์ต๋๋ค. ๊ทธ๋ ๊ทธ๋ด ๊ฒ์ด, ์์ ๊ฐ์๋ ์ง์คํ๊ธฐ ํ๋ค๊ณ , ์จ๋ผ์ธ ๋ธ๋ก๊ทธ์ ์ฌ๋ผ์ค๋ ๊ธ๋ค์ ๋จํธ์ ์ผ ๋ฟ๋๋ฌ ์ ๋ขฐํ ์ ์์์ต๋๋ค. ์ ๋ ๋ํ์์ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฒฐ๊ตญ ์ฑ ์ ์ฝ์๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ์ฑ ๊ณผ ์จ๋ผ์ธ ์์ ๊ฐ์๋ ์ํธ ๋ณด์์ ์ผ๋ก, ์ฑ ๋ง์ผ๋ก๋ ์ดํดํ๊ธฐ ํ๋ ํธ๋ฆฌ์ ์์ง์์ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ ํ๋ฉฐ, ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ์ ์๋์ง ํจ๊ณผ๋ฅผ ์ผ์ผ์ผฐ์ต๋๋ค.
๋๋ฒ๊น ์ ์๋๋ ์๋ค
๊ตฌํ์ ๊ตฌํ์ด๊ณ ๋๋ฒ๊น ์ ๋๋ฒ๊น ์ด์์ต๋๋ค. ์ฝ์ ์ ์์ ์ฒ๋ฆฌ, ๋ฐ๋ณต ์ผ์ด์ค 3๊ฐ, ์ข ๋ฃ ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ญ์ ๋ ์์ ์ฒ๋ฆฌ, ๋ฐ๋ณต ์ผ์ด์ค 4๊ฐ, ์ข ๋ฃ ์ฒ๋ฆฌ. "์ฑ ์์ ์ํค๋ ๋๋ก ์ง๋ฉด ๋๊ฒ ๋ค" ํ๋๋ฐ, ๋ง์ ์ฝ์ง, ๋ง์ ์ ๋์๊ฐ๋๋ฉด, ๊ทธ๋ ์ง๊ฐ ์์์ต๋๋ค. ๋ํ์ ์ธ ์์๋ก ์์ ๊ฐ์ ๊ฒ์ด ์์์ต๋๋ค. ํ ์คํธ ์ฝ๋์ ๋ง์ง๋ง ๊ด๋ฌธ์ธ ๋๋ค ํค ์ฝ์ , ๊ฒ์ ๋ฐ ์ญ์ ์์ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๊ฒฐ๊ตญ ์ฐพ์๋ ๋ฌธ์ ๋ ๋ ธ๋ ์ญ์ ํ fixupํ๋ ๊ณผ์ ์ธ restoreEraseOrder์ ์์์ต๋๋ค. ์ ์ฝ๋์๋ ๋ฐ๋ณต๋ฌธ ์ง์ ์ ์ '๋์์ด NIL์ด๋ฉด ์ฆ์ ๋ฆฌํด'ํ๋ ๋ถ๋ถ์ด ์์๋๋ฐ, ์ฌ์ค ์ด๊ฒ ๋ฌธ์ ์๋ ๊ฒ์ ๋๋ค. ๊ทธ if๋ฌธ ํ๋๊ฐ “me๊ฐ NIL ๋ ธ๋์ธ ์๊ฐ ์๋ฌด๊ฒ๋ ์ํ๊ณ ๋์๊ฐ” ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ฑ ์์ ์ ์๋ ์ญ์ ํ fixup ์๊ณ ๋ฆฌ์ฆ์ด ์๊ตฌํ๋ “๋๋ธ ๋ธ๋ ์ ํ” ๊ณผ์ ์ ์์ ์คํตํด๋ฒ๋ฆฝ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ nil ๋ ธ๋(์ฆ me == t->nil)๊ฐ ๊ฐ๊ณ ์์ด์ผ ํ ๋ถ๋ชจ ํฌ์ธํฐ ์ฐธ์กฐ๋ ๋ฃจํธ๊น์ง ์ฌ๋ผ๊ฐ์ ๊ฒ์ ์๋ฅผ ์ฌ์กฐ์ ํ๋ ๋ก์ง์ด ์ํ๋์ง ์์ผ๋ฏ๋ก segmentation fault๊ฐ ์ผ์ด๋๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋๋ง ๋คํ์ด์๋ ์ ์, ์ ๊ฐ ํฌ์ธํฐ ๊ด๋ จ ๊ธ์ 4๊ฐ์ฉ ์จ๊ฐ๋ฉฐ ์ ๋ฆฌํ์ฌ ๊ด๋ จ ๊ฐ๋ ์ ์ตํ ๋๋ถ์, ๊ทธ๋๋ง C ๋ฌธ๋ฒ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ด์์ ์ด๋ ค์์ ๋ ๊ฒช์๋ค๋ ์ฌ์ค์ผ ๊ฒ์ ๋๋ค. ๊ฐ๋ฉ์ด๋ RBT ์์ฒด๋ ์ด๋ ค์ด๋ฐ ์ด์ ๋ํด ๋ฉ๋ชจ๋ฆฌ์ชฝ ๋ฌธ์ ๋ค๊น์ง ์ก์์ผ ํ๋ค๋ฉด... ์์๋ง์ผ๋ก๋ ์ฝ์ง ์์ต๋๋ค.
์ด๊ฒ ๋ง๊ณ ๋ ๋๋ฒ๊น ์์ ์๋ง์ ๋๊ด์ด ์์์ง๋ง ๊ฒฐ๊ตญ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ ํ๋์์ต๋๋ค. ๋๋ฒ๊น ์๋ ์๋๊ฐ ์์์ต๋๋ค. ์ฌ์ง์ด ์ฑGPT๋ ์ด๋ฅผ ๋์์ฃผ์ง ๋ชปํ์ต๋๋ค. ๊ณ ์ํด์ผ Visual Studio Code์ launch.json๊ณผ tasks.json์ ์ ์์ฑํด์ GUI๋ก ๋๋ฒ๊น ํ๋ ๊ฒ์ด ์ ํฌ๊ฐ ์ธ ์ ์๋ ์ ์ผํ '์ฌ์ด ๊ธธ'์ด์์ต๋๋ค. ์ด๋ ์ฌ์ค ํ์ ์์ ๋๊ท๋ชจ ์ฝ๋๋ฅผ ์ ํ ๋๋ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค๋ ์ ์์ (LLM์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ์ ๋๋ก ์ฝ๋๋ฒ ์ด์ค๊ฐ ํฌ๊ฑฐ๋, ๋ง๋ถ๋ฆฌ ํ๊ฒฝ์ด๊ฑฐ๋ ๋ฑ), ์ด๋ค ์๋ฏธ๋ก ํ์ฅ๊ฐ์ ๋ค์ ๋๋ผ๊ฒ ํด์ฃผ๋ ๊ฒฝํ์ด์์ต๋๋ค.
ํ๋์ ์ปดํจํ ์ด๋ ์ค๋ก ๋๋จํ ๊ฒ์ ๋๋ค. ์๋ณธ ํ ์คํธ ์ฝ๋์๋ 10000๊ฐ์ ๋ ธ๋๋ฅผ ๋๋ค์ผ๋ก ์์ฑ, ์ฝ์ , ๊ฒ์, ์ญ์ ํ๋๋ฐ, ์ ๋ ์ด๋ฅผ 1์ต ๊ฐ๋ก ๋ฐ๊พธ์ด ์๋์์ผ๋ดค์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ ์์ ๊ฐ์ต๋๋ค. ์ด๊ฒ ๋๋ค๋, ์ ์์ด ๋๋์ต๋๋ค. ์ ์ฒด ์ฝ๋๋ ์ฌ๊ธฐ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋ ๋-๋ธ๋ ํธ๋ฆฌ ๊ณผ์ ๋ฅผ ์ฒ์ ๋ง์ฃผํ์ ๋์ ๋ง๋งํจ์ ๊ธฐ์ต์ ์ ๋ช ํฉ๋๋ค. ํ์ง๋ง ๊ทธ ์ด๋ ค์ ์์์ ์คํ๋ ค ๋ฐฐ์์ด ๊น์ด์ง๋ค๋ ์ฌ์ค์ ์ด๋ฒ ํ๋ก์ ํธ๋ก ์๊ฒ ๋์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก๋ ์ค์ ๋ก๋ '๋ณต์กํ๋ค'๊ณ ๋ง์ฐํ ์๊ฐํ๋ ๊ทธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ ๊ตฌํํ๊ณ ๋๋ฒ๊น ํ๋ ๊ณผ์ ์์, ๋ฌด์์ด ์ง์ ํ ํ์ต์ธ์ง ๋ค์ ํ๋ฒ ์๊ฐํ๊ฒ ๋์์ต๋๋ค.
ํนํ, ์ด๋ฒ ๊ณผ์ ๋ ๋ง์น ์๊ณ๋ฅผ 2021๋ ์ผ๋ก ๋๋ฆฐ ๋ฏํ ๊ฒฝํ์ด์์ต๋๋ค. ์ต์ํด์ง ์ฑGPT ์์ด ์ง์ ์ฑ ์ ์ฝ๊ณ , ๋ฌธ์ ๋ฅผ ์ฐพ์๊ฐ๋ฉฐ ๋๋ฒ๊น ํ๋ ์๊ฐ๋ค์, AI๋ ์๋ํ์ ํธ๋ฆฌํจ์ ์ต์ํด์ง ์ ๊ฒ ์ ์ ํ ์๊ทน์ด ๋์์ต๋๋ค. ๋ฌด์ธ๊ฐ์ ๊น์ด ๋ชฐ๋ํ๊ณ , ์ฑ , ์์ ๊ฐ์, ๋๋ฃ๋ค๊ณผ์ ๊ต๋ฅ๋ก์จ ์ด๋ ค์์ ๋ํํ๋ ๊ฒฝํ์, ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๊ฐ ๊ฐ์ง ํ๊ณ๋ฅผ ์ค์ค๋ก ๋ซ์ด๋ด๊ฒ ํ ๊ฐ์ง ์๊ฐ์ด์์ต๋๋ค.
๋ฌด์๋ณด๋ค ์ค์ํ ๊นจ๋ฌ์์, ์ด๋ค ์ด๋ ค์ด ๋ฌธ์ ๋ผ๋ ๊ฒฐ๊ตญ ์์ ๊ฒ๋ถํฐ ํด๊ฒฐํ๋ ๊ฒ์ด ์ ํจํ๋ค๋ ์ ์ด์์ต๋๋ค. Makefile ์์ฑ๋ถํฐ, ์์ ๋ฒ๊ทธ ํ๋ํ๋๋ฅผ ์ก์๊ฐ๋ ๊ณผ์ ๊น์ง, ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ๋ก ์ ์ ๋ฒ 1-4์ฃผ์ฐจ์ ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ์์๋ง ์ ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ ๋ค์ ๊นจ๋ซ๊ฒ ํด์ฃผ์์ต๋๋ค. ๋ํ ํ๋ ์ปดํจํ
์ ์๋ํจ๊ณผ ๋์์, ๊ทธ ์๋ํจ์ ๋ง๋ค์ด๊ฐ๋ ๊ฑด ๊ฒฐ๊ตญ ๊ธฐ๋ณธ์ ์ถฉ์คํ๊ณ ๊พธ์คํ ํ ๊ฑธ์์ฉ ๋์๊ฐ๋ ๊ฐ๋ฐ์์ ํ๋๋ผ๋ ๊ฒ์ ๋ค์๊ธ ๋๋ผ๊ฒ ๋์์ต๋๋ค. ์ด๋ ต์ง๋ง, ๊ทธ๋งํผ ์๋ฏธ ์๊ณ , ์ฑ์ฅํ๋ ์๊ฐ์ด์์ต๋๋ค.