κ³ λμ£Ό 12μ£Ό μ€ν°λ 컀리νλΌ 0μ£Όμ°¨ CS50 μκ°
λͺ¨λλ₯Ό μν μ»΄ν¨ν° κ³Όν (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κ°μ©μ μ λ ¬νμ¬ λ³ν©ν κ²°κ³Όμ λλ€.