๋ชจ๋๋ฅผ ์ํ ์ปดํจํฐ ๊ณผํ (CS50 2019) ๊ฐ์ข์๊ฐ : ๋ถ์คํธ์ฝ์ค (boostcourse.org)
๋ชจ๋๋ฅผ ์ํ ์ปดํจํฐ ๊ณผํ (CS50 2019)
๋ถ์คํธ์ฝ์ค ๋ฌด๋ฃ ๊ฐ์
www.boostcourse.org
์ปด๊ณต ์ ๊ณต์๋ผ์ ๊ตณ์ด ์ ๋ค์ด๋ ๋์ง๋ง.. ์ด์ฌ์ ๋์ฐพ๊ณ ์ ํ๋ ๋ง์์ผ๋ก ๋ค์ด๋ณด์๋ค.
๊ทธ ์ค์์ ์ ๋ฆฌํด๋์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ๊ฒ๋ค์ ๋ชจ์๋ด!
๋นํธ
์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด ์ปดํจํฐ๋ ๋นํธ(bit)๋ผ๋ ์ธก์ ๋จ์๋ฅผ ์๋๋ค. ๋นํธ๋ ์ด์ง ์ซ์๋ผ๋ ๋ป์ ๊ฐ์ง “binary digit”์ ์ค์๋ง์ด๋ฉฐ, 0๊ณผ 1, ๋ ๊ฐ์ง ๊ฐ๋ง ๊ฐ์ง ์ ์๋ ์ธก์ ๋จ์์ ๋๋ค.
๋นํธ์ด
๋ฐ์ดํธ(byte)๋ ์ฌ๋ ๊ฐ์ ๋นํธ๊ฐ ๋ชจ์ฌ ๋ง๋ค์ด์ง ๊ฒ์ ๋๋ค. ํ๋์ ๋ฐ์ดํธ์ ์ฌ๋ ๊ฐ์ ๋นํธ๊ฐ ์๊ณ , ๋นํธ ํ๋๋ 0๊ณผ 1๋ก ํํ๋ ์ ์๊ธฐ ๋๋ฌธ์ 2^8 = 256 ๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํธ๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ๊ฐ ๋ชจ์ด๋ฉด ๋ ํฐ ๋จ์๊ฐ ๋ ์ ์์ต๋๋ค. ํฌ๋ก๋ฐ์ดํธ๋ 1,000 ๋ฐ์ดํธ, ๋ฉ๊ฐ๋ฐ์ดํธ๋ 1,000 ํฌ๋ก๋ฐ์ดํธ(100๋ง ๋ฐ์ดํธ), ๊ธฐ๊ฐ๋ฐ์ดํธ๋ 1,000 ๋ฉ๊ฐ๋ฐ์ดํธ(10์ต ๋ฐ์ดํธ)์ ๋๋ค. ํ ๋ผ๋ฐ์ดํธ๋ 1,000 ๊ธฐ๊ฐ๋ฐ์ดํธ(1์กฐ ๋ฐ์ดํธ)์ด๋ฉฐ, ์ฌ์ง์ด ํํ๋ฐ์ดํธ์ ์์ฌ๋ฐ์ดํธ์ ๊ฐ์ ๋ ํฐ ๋จ์๋ ์กด์ฌํฉ๋๋ค.
์์คํค์ฝ๋
๋ฐ์ดํฐ ํ์
- bool (1๋ฐ์ดํธ) : ๋ถ๋ฆฌ์ธ ํํ, (์) True, False, 1, 0, yes, no
- char (1๋ฐ์ดํธ) : ๋ฌธ์ ํ๋ (์) 'a', 'Z', '?'
- string: ๋ฌธ์์ด
- int (4๋ฐ์ดํธ) : ํน์ ํฌ๊ธฐ ๋๋ ํน์ ๋นํธ๊น์ง์ ์ ์ (์) 5, 28, -3, 0
- long (8๋ฐ์ดํธ) : ๋ ํฐ ํฌ๊ธฐ์ ์ ์
- float (4๋ฐ์ดํธ): ๋ถ๋์์์ ์ ๊ฐ๋ ์ค์ (์) 3.14, 0.0, -28.56
- double (8๋ฐ์ดํธ) : ๋ถ๋์์์ ์ ํฌํจํ ๋ ํฐ ์ค์
ํ์ ์ง์ ์
- %c : char
- %f : float, double
- %i : int
- %li : long
- %s : string
์ ์ฒ๋ฆฌ(Precompile)
์ปดํ์ผ์ ์ ์ฒด ๊ณผ์ ์ ๋ค ๋จ๊ณ๋ก ๋๋์ด๋ณผ ์ ์์ต๋๋ค. ๊ทธ ์ค ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ ์ฒ๋ฆฌ์ธ๋ฐ, ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด ์ํ๋ฉ๋๋ค. # ์ผ๋ก ์์๋๋ C ์์ค ์ฝ๋๋ ์ ์ฒ๋ฆฌ๊ธฐ์๊ฒ ์ค์ง์ ์ธ ์ปดํ์ผ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๋ผ๊ณ ์๋ ค์ค๋๋ค.
์๋ฅผ ๋ค์ด, #include๋ ์ ์ฒ๋ฆฌ๊ธฐ์๊ฒ ๋ค๋ฅธ ํ์ผ์ ๋ด์ฉ์ ํฌํจ์ํค๋ผ๊ณ ์๋ ค์ค๋๋ค. ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋์ #include ์ ๊ฐ์ ์ค์ ํฌํจํ๋ฉด, ์ ์ฒ๋ฆฌ๊ธฐ๋ ์๋ก์ด ํ์ผ์ ์์ฑํ๋๋ฐ ์ด ํ์ผ์ ์ฌ์ ํ C ์์ค ์ฝ๋ ํํ์ด๋ฉฐ stdio.h ํ์ผ์ ๋ด์ฉ์ด #include ๋ถ๋ถ์ ํฌํจ๋ฉ๋๋ค.
์ปดํ์ผ(Compile)
์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์ ์ฒ๋ฆฌํ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ๊ทธ ๋ค์ ๋จ๊ณ๋ ์ปดํ์ผ์ ๋๋ค. ์ปดํ์ผ๋ฌ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ C ์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ์ด๋ผ๋ ์ ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ปดํ์ผํฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ๋ C๋ณด๋ค ์ฐ์ฐ์ ์ข ๋ฅ๊ฐ ํจ์ฌ ์ ์ง๋ง, ์ฌ๋ฌ ์ฐ์ฐ๋ค์ด ํจ๊ป ์ฌ์ฉ๋๋ฉด C์์ ํ ์ ์๋ ๋ชจ๋ ๊ฒ๋ค์ ์ํํ ์ ์์ต๋๋ค. C ์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํ์์ผ์ค์ผ๋ก์จ ์ปดํ์ผ๋ฌ๋ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด์ ์ต๋ํ ๊ฐ๊น์ด ํ๋ก๊ทธ๋จ์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค. ์ปดํ์ผ์ด๋ผ๋ ์ฉ์ด๋ ์์ค ์ฝ๋์์ ์ค๋ธ์ ํธ ์ฝ๋๋ก ๋ณํํ๋ ์ ์ฒด ๊ณผ์ ์ ํตํ์ด ์ผ์ปซ๊ธฐ๋ ํ์ง๋ง, ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ฒ๋ฆฌํ ์์ค ์ฝ๋๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํ์ํค๋ ๋จ๊ณ๋ฅผ ๋งํ๊ธฐ๋ ํฉ๋๋ค.
์ด์ ๋ธ(Assemble)
์์ค ์ฝ๋๊ฐ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํ๋๋ฉด, ๋ค์ ๋จ๊ณ์ธ ์ด์ ๋ธ ๋จ๊ณ๋ก ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ค๋ธ์ ํธ ์ฝ๋๋ก ๋ณํ์ํค๋ ๊ฒ์ ๋๋ค. ์ปดํจํฐ์ ์ค์์ฒ๋ฆฌ์ฅ์น๊ฐ ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ ์ํํด์ผ ํ๋์ง ์ ์ ์๋ ๋ช ๋ น์ด ํํ์ธ ์ฐ์๋ 0๊ณผ 1๋ค๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ด์ฃ . ์ด ๋ณํ์์ ์ ์ด์ ๋ธ๋ฌ๋ผ๋ ํ๋ก๊ทธ๋จ์ด ์ํํฉ๋๋ค. ์์ค ์ฝ๋์์ ์ค๋ธ์ ํธ ์ฝ๋๋ก ์ปดํ์ผ ๋์ด์ผ ํ ํ์ผ์ด ๋ฑ ํ ๊ฐ๋ผ๋ฉด, ์ปดํ์ผ ์์ ์ ์ฌ๊ธฐ์ ๋์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋งํฌ๋ผ ๋ถ๋ฆฌ๋ ๋จ๊ณ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
๋งํฌ(Link)
๋ง์ฝ ํ๋ก๊ทธ๋จ์ด (math.h๋ cs50.h์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํด) ์ฌ๋ฌ ๊ฐ์ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ด ํ๋์ ์ค๋ธ์ ํธ ํ์ผ๋ก ํฉ์ณ์ ธ์ผ ํ๋ค๋ฉด ๋งํฌ๋ผ๋ ์ปดํ์ผ์ ๋ง์ง๋ง ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค. ๋ง์ปค๋ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ์ค๋ธ์ ํธ ์ฝ๋ ํ์ผ์ ์คํ ๊ฐ๋ฅํ ํ๋์ ์ค๋ธ์ ํธ ์ฝ๋ ํ์ผ๋ก ํฉ์ณ์ค๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํ์ผ์ ํ๋ ๋์์ CS50 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํฌํ๋ฉด ์ค๋ธ์ ํธ ์ฝ๋๋ GetInt()๋ GetString() ๊ฐ์ ํจ์๋ฅผ ์ด๋ป๊ฒ ์คํํ ์ง ์ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ฒ๊ทธ์ ๋๋ฒ๊น
๋ฒ๊ทธ(bug)๋ ์ฝ๋์ ๋ค์ด์๋ ์ค๋ฅ์ ๋๋ค. ๋ฒ๊ทธ๋ก ์ธํด ํ๋ก๊ทธ๋จ์ ์คํ์ ์คํจํ๊ฑฐ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ํ๋ ๋๋ก ๋์ํ์ง ์๊ฒ ๋ฉ๋๋ค. ๋ฒ๊ทธ๋ฅผ ๋ง๋ค๊ณ ์ถ์ง ์๊ฒ ์ง๋ง ๋ชจ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ ๋ฒ๊ทธ์ ๋ง์ฃผํ๊ฒ ๋์ด์์ต๋๋ค. ๋๋ฒ๊น (debugging)์ ์ฝ๋์ ์๋ ๋ฒ๊ทธ๋ฅผ ์๋ณํ๊ณ ๊ณ ์น๋ ๊ณผ์ ์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๋๋ฒ๊ฑฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋๋ฒ๊น ์ ํ๊ฒ ๋ฉ๋๋ค.
์์ ๊ฐ์ ๊ทธ๋ฆผ์ ๊ณต์์ผ๋ก ํ๊ธฐํ ๊ฒ์ด Big O ํ๊ธฐ๋ฒ์ ๋๋ค.
์ฌ๊ธฐ์ O๋ “on the order of”์ ์ฝ์๋ก, ์ฝ๊ฒ ์๊ฐํ๋ฉด “~๋งํผ์ ์ ๋๋ก ์ปค์ง๋” ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
O(n) ์ n๋งํผ ์ปค์ง๋ ๊ฒ์ด๋ฏ๋ก n์ด ๋์ด๋ ์๋ก ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. O(n/2)๋ ๊ฒฐ๊ตญ n์ด ๋งค์ฐ ์ปค์ง๋ฉด 1/2์ ํฐ ์๋ฏธ๊ฐ ์์ด์ง๋ฏ๋ก O(n)์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ฃผ๋ก ์๋ ๋ชฉ๋ก๊ณผ ๊ฐ์ Big O ํ๊ธฐ๊ฐ ์คํ ์๊ฐ์ ๋ํ๋ด๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- O(n^2)
- O(n log n)
- O(n) - ์ ํ ๊ฒ์
- O(log n) - ์ด์ง ๊ฒ์
- O(1)
Big O๊ฐ ์๊ณ ๋ฆฌ์ฆ ์คํ ์๊ฐ์ ์ํ์ ๋ํ๋ธ ๊ฒ์ด๋ผ๋ฉด, ๋ฐ๋๋ก Big Ω๋ ์๊ณ ๋ฆฌ์ฆ ์คํ ์๊ฐ์ ํํ์ ๋ํ๋ด๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ์ ํ ๊ฒ์์์๋ n๊ฐ์ ํญ๋ชฉ์ด ์์๋ ์ต๋ n๋ฒ์ ๊ฒ์์ ํด์ผ ํ๋ฏ๋ก ์ํ์ด O(n)์ด ๋์ง๋ง ์ด์ด ์ข๋ค๋ฉด ํ ๋ฒ๋ง์ ๊ฒ์์ ๋๋ผ์๋ ์์ผ๋ฏ๋ก ํํ์ Ω(1)์ด ๋ฉ๋๋ค.
์ญ์ ์๋ ๋ชฉ๋ก๊ณผ ๊ฐ์ Big Ω ํ๊ธฐ๊ฐ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- Ω(n^2)
- Ω(n log n)
- Ω(n) - ๋ฐฐ์ด ์์ ์กด์ฌํ๋ ๊ฐ์ ๊ฐ์ ์ธ๊ธฐ
- Ω(log n)
- Ω(1) - ์ ํ ๊ฒ์, ์ด์ง ๊ฒ์
์ ํ ๊ฒ์ O(n) / Ω(1)
๋ฒ๋ธ ์ ๋ ฌ O(n^2) / Ω(n^2), Ω(n)
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ ๋ฒ๋ธ ์ ๋ ฌ์ ๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ์ ๋ ๊ฐ์ ์ธ์ ํ ์๋ฃ ๊ฐ์ ๋น๊ตํ๋ฉด์ ์์น๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค.
๋ง์ฝ ์ ๋ ฌ์ด ๋ชจ๋ ๋์ด ์๋ ์ซ์ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ง๋ค๋ฉด ๊ตํ์ด ํ๋๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ๋ฒ๋ธ ์ ๋ ฌ์ ํํ์ Ω(n)์ด ๋ฉ๋๋ค.
์ ํ ์ ๋ ฌ O(n^2) / Ω(n^2)
์ ๋ ฌ์ ์ํ ์๊ณ ๋ฆฌ์ฆ ์ค ์ ํ์ ๋ ฌ์ ๋ฐฐ์ด ์์ ์๋ฃ ์ค ๊ฐ์ฅ ์์ ์(ํน์ ๊ฐ์ฅ ํฐ ์)๋ฅผ ์ฐพ์ ์ฒซ ๋ฒ์งธ ์์น(ํน์ ๊ฐ์ฅ ๋ง์ง๋ง ์์น)์ ์์ ๊ตํํด์ฃผ๋ ๋ฐฉ์์ ์ ๋ ฌ์ ๋๋ค.
์ ํ ์ ๋ ฌ์ ๊ตํ ํ์๋ฅผ ์ต์ํํ๋ ๋ฐ๋ฉด ๊ฐ ์๋ฃ๋ฅผ ๋น๊ตํ๋ ํ์๋ ์ฆ๊ฐํฉ๋๋ค.
๋ณํฉ ์ ๋ ฌ O(n log n) / Ω(n log n)
์ ํ๋ฒํธ๋ถ์ ๋ถํ ์ ๋ณต ํ์์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ก ๋๋์ด๊ฐ๋ค๋ ๊ฒ๊ณผ ๊ณตํต์ ์ด ์๋ ๋ฐฉ๋ฒ์ธ ๋ณํฉ ์ ๋ ฌ(ํฉ๋ณ ์ ๋ ฌ)์ด ์์ต๋๋ค.
๋ณํฉ ์ ๋ ฌ์ ์์๊ฐ ํ ๊ฐ๊ฐ ๋ ๋๊น์ง ๊ณ์ํด์ ๋ฐ์ผ๋ก ๋๋๋ค๊ฐ ๋ค์ ํฉ์ณ๋๊ฐ๋ฉฐ ์ ๋ ฌ์ ํ๋ ๋ฐฉ์์ ๋๋ค.
7 | 4 | 5 | 2 | 6 | 3 | 8 | 1 → ๊ฐ์ฅ ์์ ๋ถ๋ถ (์ซ์ 1๊ฐ)์ผ๋ก ๋๋ ์ง ๊ฒฐ๊ณผ์ ๋๋ค.
4 7 | 2 5 | 3 6 | 1 8 → ์ซ์ 1๊ฐ์ฉ์ ์ ๋ ฌํ์ฌ ๋ณํฉํ ๊ฒฐ๊ณผ์ ๋๋ค.
2 4 5 7 | 1 3 6 8 → ์ซ์ 2๊ฐ์ฉ์ ์ ๋ ฌํ์ฌ ๋ณํฉํ ๊ฒฐ๊ณผ์ ๋๋ค.
1 2 3 4 5 6 7 8 → ๋ง์ง๋ง์ผ๋ก ์ซ์ 4๊ฐ์ฉ์ ์ ๋ ฌํ์ฌ ๋ณํฉํ ๊ฒฐ๊ณผ์ ๋๋ค.
'career' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ง๋ค๋ผํธ ๊ณํํ ๋ ธ์ ํ ํ๋ฆฟ (0) | 2023.11.16 |
---|---|
๊ฐ์ฅ ๋ชปํ๋ ์ฌ๋์ด ๋ผ๋ผ (0) | 2023.10.25 |
๊ณ ๋์ฃผ 12์ฃผ ์คํฐ๋ ์ปค๋ฆฌํ๋ผ 1์ฃผ์ฐจ ๊นํ๋ธ ์๊ฐ (0) | 2022.10.19 |
ํ๋ก ํธ์๋ 12์ฃผ ์คํฐ๋ ์ปค๋ฆฌํ๋ผ (0) | 2022.09.28 |
[20220307 TIL] ํ๋ก ํธ์๋ ๊ด๋ จ ๊ธ (ํ ์ค์ ํ๋ก ํธ์๋) (0) | 2022.03.07 |