[CS50] CS50x 2026 - Lecture 0 - Scratch

Posted by Euisuk's Dev Log on January 9, 2026

[CS50] CS50x 2026 - Lecture 0 - Scratch

https://youtu.be/7ZJ4oo4h8vI

참고 자료

  • Harvard CS50: Introduction to Computer Science (https://cs50.harvard.edu/)
  • 원본 μ˜μƒ: [ν•œκΈ€λ”λΉ™] β€œAIκ°€ μ½”λ”© λ‹€ ν•˜λŠ”λ° μ™œ λ°°μ›Œμš”?” ν•˜λ²„λ“œ ꡐ수의 사이닀 참ꡐ윑 (https://www.youtube.com/watch?v=7ZJ4oo4h8vI)

λ³Έ μ˜μƒμ˜ 이미지 μΆœμ²˜λŠ” μœ„μ— μ²¨λΆ€ν•œ 유튜브 μ˜μƒμž…λ‹ˆλ‹€.

μ„œλ‘ 

β€œAIκ°€ 코딩을 λ‹€ ν•΄μ£ΌλŠ”λ° μ™œ ν”„λ‘œκ·Έλž˜λ°μ„ λ°°μ›Œμ•Ό ν•˜λ‚˜μš”?”

이 μ§ˆλ¬Έμ€ ChatGPT, Claude 같은 λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈ(LLM)이 λ“±μž₯ν•œ 이후 κ°€μž₯ 많이 λ°›λŠ” 질문 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. ν•˜λ²„λ“œ λŒ€ν•™κ΅μ˜ CS50 κ°•μ˜λ₯Ό μ΄λ„λŠ” David Malan κ΅μˆ˜λŠ” 이 μ§ˆλ¬Έμ— λŒ€ν•΄ λͺ…μΎŒν•œ 닡변을 μ œμ‹œν•©λ‹ˆλ‹€. AI의 확산은 λ‘λ €μ›Œν•  ν˜„μƒμ΄ μ•„λ‹ˆλΌ 였히렀 ν₯λ―Έμ§„μ§„ν•œ 기회이며, κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  컴퓨터 κ³Όν•™μ˜ κΈ°λ³ΈκΈ°λŠ” μ—¬μ „νžˆ ν•„μˆ˜μ μ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” CS50 κ°•μ˜μ˜ 핡심 λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μ™œ AI μ‹œλŒ€μ—λ„ 컴퓨터 κ³Όν•™ ꡐ윑이 μ€‘μš”ν•œμ§€, 그리고 컴퓨터가 세상을 μ–΄λ–»κ²Œ ν‘œν˜„ν•˜κ³  문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

AI μ‹œλŒ€μ˜ ν”„λ‘œκ·Έλž˜λ°: 병λͺ©μ—μ„œ ν˜‘μ—…μœΌλ‘œ

μΈκ°„μ΄λΌλŠ” 병λͺ© ν˜„μƒ

μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ—…κ³„μ—μ„œλŠ” μˆ˜μ‹­ λ…„ λ™μ•ˆ 인간이 직접 μ œν’ˆμ„ λ§Œλ“€κ³  문제λ₯Ό ν•΄κ²°ν•΄ μ™”μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—¬κΈ°μ—λŠ” 근본적인 ν•œκ³„κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜λ£¨ λ™μ•ˆ 일할 수 μžˆλŠ” μ‹œκ°„μ€ μ œν•œμ μ΄κ³ , νŒ€μ› μˆ˜λ„ ν•œμ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 반면 ν•΄κ²°ν•΄μ•Ό ν•  버그와 κ΅¬ν˜„ν•˜κ³  싢은 κΈ°λŠ₯은 항상 λ„˜μ³λ‚¬μŠ΅λ‹ˆλ‹€. 인간 μžμ²΄κ°€ 병λͺ©(bottleneck)μ΄μ—ˆλ˜ κ²ƒμž…λ‹ˆλ‹€.

AI의 λ“±μž₯은 이 병λͺ© ν˜„μƒμ„ 근본적으둜 λ³€ν™”μ‹œν‚€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이제 κ°œλ°œμžλŠ” AIλ₯Ό ν™œμš©ν•˜μ—¬ μ½”λ“œμ˜ 버그λ₯Ό μ°Ύμ•„λ‚΄κ±°λ‚˜, μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” μž‘μ—…μ„ 훨씬 효율적으둜 μˆ˜ν–‰ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

핸듀은 μ—¬μ „νžˆ 인간이 μž‘μ•„μ•Ό ν•œλ‹€

κ·Έλ ‡λ‹€λ©΄ AIκ°€ λͺ¨λ“  것을 ν•΄κ²°ν•΄ 쀄 수 μžˆμ„κΉŒμš”? Malan κ΅μˆ˜λŠ” λ‹¨ν˜Έν•˜κ²Œ β€œμ•„λ‹ˆλ‹€β€λΌκ³  λ‹΅ν•©λ‹ˆλ‹€. CS50이 β€œComputer Scienceβ€λΌλŠ” 이름을 κ°€μ§„ μ΄μœ κ°€ λ°”λ‘œ 여기에 μžˆμŠ΅λ‹ˆλ‹€. 이 μˆ˜μ—…μ€ 단 ν•œ λ²ˆλ„ λ‹¨μˆœν•œ μ½”λ”© κΈ°μˆ μ„ κ°€λ₯΄μΉ˜λŠ” μˆ˜μ—…μ΄ μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€. μ½”λ”© λŠ₯λ ₯은 컴퓨터 과학을 λ°°μš°λŠ” κ³Όμ •μ—μ„œ μžμ—°μŠ€λŸ½κ²Œ λ”°λΌμ˜€λŠ” 뢀산물일 λΏμž…λ‹ˆλ‹€.

CS50의 μ§„μ •ν•œ λͺ©ν‘œλŠ” μ‚¬κ³ ν•˜λŠ” 방법을 κ°€λ₯΄μΉ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μž…λ ₯을 λ°›μ•„μ„œ μ˜¬λ°”λ₯Έ 좜λ ₯을 λ§Œλ“€μ–΄λ‚΄λŠ” 법, 그리고 이λ₯Ό μœ„ν•œ 도ꡬ듀을 λ§ˆμŠ€ν„°ν•˜λŠ” 법을 λ°°μš°λŠ” 것이 ν•΅μ‹¬μž…λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ€ μ‹œμŠ€ν…œμ— λŒλ €λ‹€λ‹ˆλŠ” 승객이 μ•„λ‹ˆλΌ, 이 μ‹œμŠ€ν…œμ„ μ™„μ „νžˆ μž₯μ•…ν•œ μ„€κ³„μžκ°€ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ³„μ‚°κΈ°μ˜ κ΅ν›ˆ

이런 상황은 과거에도 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 계산기가 처음 λ“±μž₯ν–ˆμ„ λ•Œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ 더 이상 암산을 배울 ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μˆ˜μ‹­ 년이 μ§€λ‚œ μ§€κΈˆλ„ λ§μ…ˆκ³Ό λΊ„μ…ˆμ˜ 원리λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 μ—¬μ „νžˆ κ°€μΉ˜ μžˆλŠ” μΌμž…λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ, AIκ°€ μ½”λ“œλ₯Ό μž‘μ„±ν•΄ 주더라도 κ·Έ μ½”λ“œκ°€ 무엇을 ν•˜λŠ”μ§€, μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ”μ§€ μ΄ν•΄ν•˜λŠ” 것은 μΈκ°„μ˜ λͺ«μž…λ‹ˆλ‹€.

핡심 원리λ₯Ό λ§ˆμŠ€ν„°ν•œ ν›„μ—λŠ” AIλΌλŠ” μ‘°μˆ˜μ—κ²Œ κΈ°λŒ€μ–΄ 문제λ₯Ό ν•΄κ²°ν•˜λ©΄ λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ κ·Έ 전에 κΈ°λ³ΈκΈ°λ₯Ό κ°–μΆ”λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€.

λ°μ΄ν„°μ˜ ν‘œν˜„: μ»΄ν“¨ν„°λŠ” 세상을 μ–΄λ–»κ²Œ μ΄ν•΄ν•˜λŠ”κ°€

μ΄μ§„λ²•μ˜ 원리

μ»΄ν“¨ν„°λŠ” μ˜μ–΄λ„, ν•œκ΅­μ–΄λ„, μš°λ¦¬κ°€ μΌμƒμ—μ„œ μ‚¬μš©ν•˜λŠ” 10진법 μˆ«μžλ„ μ§μ ‘μ μœΌλ‘œ μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. 컴퓨터가 μ΄ν•΄ν•˜λŠ” 것은 였직 두 κ°€μ§€ μƒνƒœλΏμž…λ‹ˆλ‹€. μŠ€μœ„μΉ˜κ°€ μΌœμ§„ μƒνƒœ(1)와 κΊΌμ§„ μƒνƒœ(0)μž…λ‹ˆλ‹€. 이 ν•˜λ‚˜ν•˜λ‚˜μ˜ λ‹¨μœ„λ₯Ό λΉ„νŠΈ(bit)라고 λΆ€λ₯΄λ©°, μ΄λŠ” Binary Digit의 μ€„μž„λ§μž…λ‹ˆλ‹€.

μ†κ°€λ½μœΌλ‘œ 숫자λ₯Ό μ„ΈλŠ” 방식을 생각해 λ΄…μ‹œλ‹€. 일반적으둜 손가락 λ‹€μ„― 개둜 1λΆ€ν„° 5κΉŒμ§€λ§Œ μ…€ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ†κ°€λ½μ˜ νŒ¨ν„΄μ„ ν™œμš©ν•˜λ©΄ μ–΄λ–¨κΉŒμš”? 각 손가락에 의미λ₯Ό λΆ€μ—¬ν•˜μ—¬ μ—„μ§€λŠ” 1, κ²€μ§€λŠ” 2, μ€‘μ§€λŠ” 4와 같이 μ„€μ •ν•˜λ©΄, ν•œ μ†μœΌλ‘œ 0λΆ€ν„° 31κΉŒμ§€ 총 32κ°€μ§€ 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

컴퓨터도 λ™μΌν•œ 원리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 전ꡬ μ„Έ κ°œκ°€ μžˆλ‹€λ©΄, 각각 1의 자리, 2의 자리, 4의 자리λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λͺ¨λ‘ κΊΌμ Έ 있으면 0, 맨 였λ₯Έμͺ½λ§Œ μΌœμ§€λ©΄ 1, κ°€μš΄λ°λ§Œ μΌœμ§€λ©΄ 2, λ‘˜ λ‹€ μΌœμ§€λ©΄ 3μž…λ‹ˆλ‹€. 이런 μ‹μœΌλ‘œ 전ꡬ μ„Έ 개만으둜 0λΆ€ν„° 7κΉŒμ§€ 8κ°€μ§€ 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°”μ΄νŠΈμ™€ λΉ„νŠΈμ˜ ν™•μž₯

λΉ„νŠΈλ₯Ό 8개 λͺ¨μœΌλ©΄ 1λ°”μ΄νŠΈ(byte)κ°€ λ©λ‹ˆλ‹€.

1λ°”μ΄νŠΈλ‘œλŠ” 0λΆ€ν„° 255κΉŒμ§€ 총 256κ°€μ§€ 값을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ˜›λ‚  컴퓨터가 256κ°€μ§€ μƒ‰μƒλ§Œ ν‘œμ‹œν•  수 μžˆμ—ˆλ˜ 이유, GIF 이미지가 256μƒ‰μœΌλ‘œ μ œν•œλ˜λŠ” μ΄μœ κ°€ λ°”λ‘œ 여기에 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’‘ TIPS
GIF 이미지가 256색(8λΉ„νŠΈ)으둜 μ œν•œλ˜λŠ” μ΄μœ λŠ” 1987λ…„ 기술 개발 λ‹Ήμ‹œμ˜ μ €μž₯ 곡간 μ ˆμ•½ 및 전솑 속도 ν–₯상(νš¨μœ¨μ„±)이 μ£Ό λͺ©μ μ΄μ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

32λΉ„νŠΈμ™€ 64λΉ„νŠΈμ˜ μ°¨μ΄λŠ” λ‹¨μˆœνžˆ 두 λ°°κ°€ μ•„λ‹™λ‹ˆλ‹€.

32λΉ„νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” μˆ«μžλŠ” μ•½ 40μ–΅(2322^{32}232)이며, μ΄λŠ” μ•½ 4GB에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. κ³Όκ±° 컴퓨터가 RAM을 4GB 이상 μΈμ‹ν•˜μ§€ λͺ»ν–ˆλ˜ μ΄μœ μž…λ‹ˆλ‹€.

반면 64λΉ„νŠΈλŠ” 2642^{64}264, 즉 μ•½ 18κ²½(18,446,744,073,709,551,616)μ΄λΌλŠ” μ²œλ¬Έν•™μ  숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λΉ„νŠΈ 수λ₯Ό 두 배둜 λŠ˜λ Έμ„ 뿐인데, ν‘œν˜„ κ°€λŠ₯ν•œ λ²”μœ„λŠ” κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œ κ²ƒμž…λ‹ˆλ‹€.

문자의 ν‘œν˜„: ASCII와 Unicode

μˆ«μžλ§ŒμœΌλ‘œλŠ” 이메일, λ¬Έμ„œ, λ©”μ‹œμ§€λ₯Ό ν‘œν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 컴퓨터 κ³Όν•™μžλ“€μ€ 약속을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. νŠΉμ • 숫자λ₯Ό νŠΉμ • λ¬Έμžμ— λŒ€μ‘μ‹œν‚€κΈ°λ‘œ ν•œ κ²ƒμž…λ‹ˆλ‹€. 이 약속이 λ°”λ‘œ ASCII(American Standard Code for Information Interchange)μž…λ‹ˆλ‹€.

ASCIIμ—μ„œ 65λŠ” λŒ€λ¬Έμž A, 66은 B, 67은 Cλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. β€œHi!β€λΌλŠ” λ‹¨μ–΄λŠ” 컴퓨터 λ‚΄λΆ€μ—μ„œ 72(H), 105(i), 33(!)μ΄λΌλŠ” 숫자의 λ‚˜μ—΄λ‘œ μ €μž₯λ©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ΄ λ³΄λ‚΄λŠ” ν…μŠ€νŠΈ λ©”μ‹œμ§€, 이메일, λ¬Έμ„œλŠ” κ²°κ΅­ μˆ˜λ§Žμ€ 0κ³Ό 1이 λ§Œλ“€μ–΄λ‚Έ 숫자 덩어리일 뿐이며, 우리 λˆˆμ—λ§Œ κΈ€μžλ‘œ 보이도둝 μ•½μ†λ˜μ–΄ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

ASCIIλŠ” λ―Έκ΅­μ—μ„œ λ§Œλ“€μ–΄μ Έ μ˜μ–΄ μ•ŒνŒŒλ²³λ§Œ ν‘œν˜„ν•  수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Unicodeκ°€ λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€. UnicodeλŠ” 8λΉ„νŠΈλ³΄λ‹€ 훨씬 λ§Žμ€ λΉ„νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ „ 세계 λͺ¨λ“  언어와 이λͺ¨μ§€κΉŒμ§€ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2015λ…„ μ˜₯μŠ€ν¬λ“œ 사전이 β€œκΈ°μ¨μ˜ λˆˆλ¬Όμ„ ν˜λ¦¬λŠ” 얼꡴” 이λͺ¨μ§€(πŸ˜‚)λ₯Ό μ˜¬ν•΄μ˜ λ‹¨μ–΄λ‘œ μ„ μ •ν•œ 것은 λ¬Έν™”μ μœΌλ‘œ 이λͺ¨μ§€κ°€ 이미 문자둜 μΈμ •λ°›μ•˜μŒμ„ λ³΄μ—¬μ€λ‹ˆλ‹€. ν•˜μ§€λ§Œ 컴퓨터 κ³Όν•™μ˜ κ΄€μ μ—μ„œ 이λͺ¨μ§€λŠ” 그림이 μ•„λ‹ˆλΌ μ•½μ†λœ λ²ˆν˜Έμ— λΆˆκ³Όν•©λ‹ˆλ‹€.

이미지와 μ˜μƒμ˜ ν‘œν˜„

사진은 μ–΄λ–»κ²Œ ν‘œν˜„λ κΉŒμš”? 이미지λ₯Ό κ·Ήλ‹¨μ μœΌλ‘œ ν™•λŒ€ν•˜λ©΄ μˆ˜λ§Žμ€ 점듀이 λ³΄μž…λ‹ˆλ‹€. 이 점 ν•˜λ‚˜ν•˜λ‚˜λ₯Ό ν”½μ…€(pixel, Picture Element)이라고 λΆ€λ¦…λ‹ˆλ‹€. 각 픽셀은 색상 정보λ₯Ό κ°€μ§€κ³  있으며, μ»΄ν“¨ν„°λŠ” 이λ₯Ό RGB(Red, Green, Blue) μ„Έ κ°€μ§€ 숫자둜 ν‘œν˜„ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λΉ¨κ°• 72, 초둝 200, νŒŒλž‘ 0μ΄λΌλŠ” μ„Έ 숫자의 쑰합은 νŠΉμ •ν•œ λ…Έλž€μƒ‰μ„ λ§Œλ“€μ–΄λƒ…λ‹ˆλ‹€. λΉ›μ˜ μ„Έκ³„μ—μ„œλŠ” λΉ¨κ°•κ³Ό μ΄ˆλ‘μ„ μ„žμœΌλ©΄ λ…Έλž€μƒ‰μ΄ 되고, μ„Έ κ°€μ§€λ₯Ό λͺ¨λ‘ μ΅œλŒ€λ‘œ μ„žμœΌλ©΄ 흰색이 λ©λ‹ˆλ‹€. 이 원리λ₯Ό μ΄μš©ν•˜λ©΄ μ„Έ 개의 숫자만으둜 μ„Έμƒμ˜ λͺ¨λ“  색상을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μ˜μƒμ€ 이 μ›λ¦¬μ˜ ν™•μž₯μž…λ‹ˆλ‹€. μ •μ§€ 이미지(숫자 덩어리)λ₯Ό 1μ΄ˆμ— 30번 λ˜λŠ” 60λ²ˆμ”© λΉ λ₯΄κ²Œ λ°”κΏ”μΉ˜κΈ°ν•˜λ©΄ μ›€μ§μ΄λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” μ°©μ‹œκ°€ λ°œμƒν•©λ‹ˆλ‹€. κ²°κ΅­ 화면에 λ³΄μ΄λŠ” λͺ¨λ“  것(μ–Όκ΅΄, λ°°κ²½, μžλ§‰)은 수백만 개의 ν”½μ…€λ‘œ κ΅¬μ„±λ˜κ³ , 각 픽셀은 RGB 숫자둜 이루어지며, κ·Έ μˆ«μžλ“€μ€ κ°€μž₯ λ°‘λ°”λ‹₯μ—μ„œ μˆ˜λ§Žμ€ μ „κΈ° μ‹ ν˜Έκ°€ μΌœμ§€κ³  κΊΌμ§€λŠ” μ΄μ§„λ²•μ˜ 좀에 λΆˆκ³Όν•©λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜: 문제 ν•΄κ²°μ˜ 핡심

μ•Œκ³ λ¦¬μ¦˜μ΄λž€ 무엇인가

μ•Œκ³ λ¦¬μ¦˜(Algorithm)μ΄λΌλŠ” λ‹¨μ–΄λŠ” κ±°μ°½ν•˜κ²Œ λ“€λ¦¬μ§€λ§Œ, λ³Έμ§ˆμ μœΌλ‘œλŠ” 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 단계별 μ§€μΉ¨μž…λ‹ˆλ‹€. μž…λ ₯(input)을 λ°›μ•„μ„œ μ›ν•˜λŠ” 좜λ ₯(output)을 λ§Œλ“€μ–΄λ‚΄λŠ” λ ˆμ‹œν”Όμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μ „ν™”λ²ˆν˜ΈλΆ€μ—μ„œ νŠΉμ • 인물을 μ°ΎλŠ” 문제λ₯Ό 예둜 λ“€μ–΄ λ΄…μ‹œλ‹€. μž…λ ₯은 μ „ν™”λ²ˆν˜ΈλΆ€μ΄κ³ , μ›ν•˜λŠ” 좜λ ₯은 β€œMike Smith의 μ „ν™”λ²ˆν˜Έβ€ λ˜λŠ” β€œμ΄ 책에 Mike SmithλŠ” μ—†λ‹€β€λΌλŠ” κ²°κ³Όμž…λ‹ˆλ‹€.

첫 번째 μ•Œκ³ λ¦¬μ¦˜: 순차 탐색

κ°€μž₯ λ‹¨μˆœν•œ 방법은 첫 νŽ˜μ΄μ§€λΆ€ν„° ν•œ μž₯μ”© λ„˜κΈ°λŠ” κ²ƒμž…λ‹ˆλ‹€. A둜 μ‹œμž‘ν•˜λŠ” νŽ˜μ΄μ§€, B둜 μ‹œμž‘ν•˜λŠ” νŽ˜μ΄μ§€β€¦ μ΄λ ‡κ²Œ 끈기 있게 λ„˜κΈ°λ©΄ Mike Smithκ°€ 책에 μžˆλŠ” ν•œ λ°˜λ“œμ‹œ μ°Ύμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ•Œκ³ λ¦¬μ¦˜μ€ μ •ν™•(correct)ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 효율적(efficient)μΌκΉŒμš”?

μ „ν˜€ μ•„λ‹™λ‹ˆλ‹€.

1,000νŽ˜μ΄μ§€ 책이라면 μ΅œμ•…μ˜ 경우 1,000λ²ˆμ„ λ„˜κ²¨μ•Ό ν•©λ‹ˆλ‹€. μ±…μ˜ 크기에 λΉ„λ‘€ν•˜μ—¬ μ‹œκ°„μ΄ μ„ ν˜•μœΌλ‘œ μ¦κ°€ν•˜λŠ” O(n)O(n)O(n) μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.

두 μž₯μ”© λ„˜κΈ°λ©΄ μ–΄λ–¨κΉŒμš”? μ†λ„λŠ” 두 λ°° λΉ¨λΌμ§€μ§€λ§Œ, μ°ΎλŠ” 이름이 κ±΄λ„ˆλ›΄ νŽ˜μ΄μ§€μ— μžˆμ„ 수 μžˆλ‹€λŠ” 치λͺ…적인 버그가 μžˆμŠ΅λ‹ˆλ‹€. κ±΄λ„ˆλ›΄ νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ ν™•μΈν•˜λŠ” λ‘œμ§μ„ 좔가해도 μ—¬μ „νžˆ O(n)O(n)O(n)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λ²—μ–΄λ‚˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

두 번째 μ•Œκ³ λ¦¬μ¦˜: 이진 탐색

μš°λ¦¬λŠ” λ³ΈλŠ₯적으둜 더 λ˜‘λ˜‘ν•œ 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. μ „ν™”λ²ˆν˜ΈλΆ€μ˜ 쀑간을 νŽ΄μ„œ ν˜„μž¬ μœ„μΉ˜κ°€ μ°ΎλŠ” 이름보닀 μ•žμΈμ§€ 뒀인지 ν™•μΈν•˜κ³ , ν•„μš” μ—†λŠ” μ ˆλ°˜μ„ λ²„λ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€.

쀑간을 νŽ΄μ„œ T둜 μ‹œμž‘ν•˜λŠ” νŽ˜μ΄μ§€κ°€ λ‚˜μ™”λ‹€λ©΄, Mike Smith(M으둜 μ‹œμž‘)λŠ” μ™Όμͺ½μ— μžˆμŠ΅λ‹ˆλ‹€. 였λ₯Έμͺ½ μ ˆλ°˜μ€ μ™„μ „νžˆ 버릴 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 남은 μ ˆλ°˜μ—μ„œ 같은 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€. 쀑간을 νŽ΄μ„œ Jκ°€ λ‚˜μ™”λ‹€λ©΄ M은 였λ₯Έμͺ½μ— μžˆμœΌλ―€λ‘œ μ™Όμͺ½ μ ˆλ°˜μ„ λ²„λ¦½λ‹ˆλ‹€.

이 과정을 λ°˜λ³΅ν•˜λ©΄ κ²°κ΅­ 단 ν•œ μž₯의 μ’…μ΄λ§Œ λ‚¨κ²Œ 되고, 거기에 Mike Smithκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ ꡬ성 μš”μ†Œ

이 μ „ν™”λ²ˆν˜ΈλΆ€ 탐색 μ•Œκ³ λ¦¬μ¦˜μ€ λ„€ κ°€μ§€ 핡심 μš”μ†Œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

첫째, ν•¨μˆ˜(Function)μž…λ‹ˆλ‹€.

  • β€œμ§‘μ–΄λ“€μ–΄λΌβ€, β€œνŽΌμ³λΌβ€μ™€ 같은 λ™μž‘μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

λ‘˜μ§Έ, 쑰건문(Conditional)μž…λ‹ˆλ‹€.

  • β€œλ§Œμ•½ Smithκ°€ νŽ˜μ΄μ§€μ— μžˆλ‹€λ©΄ 전화해라”, β€œSmithκ°€ μ™Όμͺ½μ— μžˆλ‹€λ©΄β€¦β€œκ³Ό 같은 λΆ„κΈ° λ‘œμ§μž…λ‹ˆλ‹€.

μ…‹μ§Έ, λΆˆλ¦¬μ–Έ(Boolean)μž…λ‹ˆλ‹€.

  • β€œSmithκ°€ μ—¬κΈ° μžˆλŠ”κ°€?β€λΌλŠ” μ§ˆλ¬Έμ— 예(True) λ˜λŠ” μ•„λ‹ˆμ˜€(False)둜 λ‹΅ν•˜λŠ” μ°Έ/κ±°μ§“ κ°’μž…λ‹ˆλ‹€.

λ„·μ§Έ, 루프(Loop)μž…λ‹ˆλ‹€.

  • β€œ3번째 μ€„λ‘œ λŒμ•„κ°€λΌβ€μ²˜λŸΌ μ‚¬λžŒμ„ 찾을 λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ λ°˜λ³΅ν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

μ‹œκ°„ λ³΅μž‘λ„μ˜ 극적인 차이

두 μ•Œκ³ λ¦¬μ¦˜μ˜ 차이λ₯Ό κ·Έλž˜ν”„λ‘œ 그렀보면 λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€.

  • 순차 탐색은 데이터가 λŠ˜μ–΄λ‚˜λ©΄ μ‹œκ°„λ„ λ˜‘κ°™μ΄ λŠ˜μ–΄λ‚˜λŠ” 직선(O(n)O(n)O(n))을 κ·Έλ¦½λ‹ˆλ‹€.
  • 반면 이진 탐색은 데이터가 아무리 λŠ˜μ–΄λ‚˜λ„ μ‹œκ°„μ€ 거의 λŠ˜μ–΄λ‚˜μ§€ μ•ŠλŠ” 둜그 곑선(O(log⁑n)O(\log n)O(logn))을 κ·Έλ¦½λ‹ˆλ‹€.

이 차이λ₯Ό κ·Ήλ‹¨μ μœΌλ‘œ λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ „ν™”λ²ˆν˜ΈλΆ€μ— 40μ–΅ λͺ…(μ „ 세계 인ꡬ λ˜λŠ” Facebook/Google μ‚¬μš©μž 수)의 이름이 μžˆλ‹€κ³  κ°€μ •ν•©μ‹œλ‹€. 순차 νƒμƒ‰μœΌλ‘œ Mike Smithλ₯Ό 찾으렀면 μ΅œμ•…μ˜ 경우 40μ–΅ λ²ˆμ„ λ„˜κ²¨μ•Ό ν•©λ‹ˆλ‹€.

반면 이진 탐색을 μ‚¬μš©ν•˜λ©΄ 40얡을 반으둜 쀄이고, 20μ–΅, 10μ–΅, 5얡… μ΄λ ‡κ²Œ 계속 반으둜 μ€„μ—¬λ‚˜κ°€λ©΄ 단 ν•œ λͺ…이 남을 λ•ŒκΉŒμ§€ 단 32번이면 μΆ©λΆ„ν•©λ‹ˆλ‹€. log⁑2(4Γ—109)β‰ˆ32\log_2(4 \times 10^9) \approx 32log2​(4Γ—109)β‰ˆ32이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

40μ–΅ 번 λŒ€ 32번. 이것은 λ‹¨μˆœν•œ μ†λ„μ˜ 차이가 μ•„λ‹™λ‹ˆλ‹€. 차원이 λ‹€λ₯Έ κ²ƒμž…λ‹ˆλ‹€. 아무리 λΉ λ₯Έ μŠˆνΌμ»΄ν“¨ν„°λ₯Ό 가져와도 λΉ„νš¨μœ¨μ μΈ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€λ©΄, 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” 낑은 λ…ΈνŠΈλΆμ„ μ ˆλŒ€ 이길 수 μ—†μŠ΅λ‹ˆλ‹€.

Scratchλ₯Ό ν†΅ν•œ ν”„λ‘œκ·Έλž˜λ° 핡심 κ°œλ… ν•™μŠ΅

Scratch의 ꡐ윑적 κ°€μΉ˜

CS50μ—μ„œλŠ” 본격적인 ν…μŠ€νŠΈ 기반 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄(C, Python λ“±)에 λ“€μ–΄κ°€κΈ° 전에 MIT Media Labμ—μ„œ κ°œλ°œν•œ μ‹œκ°μ  ν”„λ‘œκ·Έλž˜λ° 언어인 Scratchλ₯Ό λ¨Όμ € λ‹€λ£Ήλ‹ˆλ‹€. Scratchλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μ€‘κ΄„ν˜Έ, κ΄„ν˜Έ, μ„Έλ―Έμ½œλ‘  같은 문법적 μš”μ†Œμ— μ‹ κ²½ μ“°μ§€ μ•Šκ³  ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 κ°œλ…μ— 집쀑할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

Scratchμ—μ„œλŠ” 퍼즐 쑰각처럼 생긴 블둝듀을 λ“œλž˜κ·Έ μ•€ λ“œλ‘­μœΌλ‘œ μ—°κ²°ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“­λ‹ˆλ‹€. 이 블둝듀은 μƒ‰μƒλ³„λ‘œ κΈ°λŠ₯이 κ΅¬λΆ„λ˜μ–΄ μžˆμ–΄ μ§κ΄€μ μœΌλ‘œ μ–΄λ–€ μ’…λ₯˜μ˜ κΈ°λŠ₯인지 νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

핡심 ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ˜ μ‹œκ°ν™”

Scratchλ₯Ό 톡해 λ°°μš°λŠ” 핡심 κ°œλ…λ“€μ€ λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ™μΌν•˜κ²Œ μ μš©λ©λ‹ˆλ‹€.

ν•¨μˆ˜(Function)λŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μž‘μž…λ‹ˆλ‹€. Scratch의 β€œsay” 블둝은 화면에 말풍선을 ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μ΄λ©°, 이 ν•¨μˆ˜λŠ” μž…λ ₯(argument)을 λ°›μ•„ λΆ€μˆ˜ 효과(side effect)λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. λΆ€μˆ˜ νš¨κ³Όλž€ 화면에 무언가가 ν‘œμ‹œλ˜κ±°λ‚˜ μŠ€ν”Όμ»€μ—μ„œ μ†Œλ¦¬κ°€ λ‚˜λŠ” κ²ƒμ²˜λŸΌ μ‚¬μš©μžκ°€ 인지할 수 μžˆλŠ” κ²°κ³Όλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

λ³€μˆ˜(Variable)λŠ” 값을 μ €μž₯ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆμž…λ‹ˆλ‹€. μˆ˜ν•™μ—μ„œ xxx, yyy, zzzκ°€ 숫자λ₯Ό 담듯이, ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ³€μˆ˜λŠ” 숫자뿐 μ•„λ‹ˆλΌ ν…μŠ€νŠΈ, μ‚¬μš©μž μž…λ ₯ λ“± λ‹€μ–‘ν•œ 값을 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Scratchμ—μ„œ β€œask” 블둝을 μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μžμ˜ 닡변이 β€œanswerβ€λΌλŠ” λ³€μˆ˜μ— μžλ™μœΌλ‘œ μ €μž₯λ©λ‹ˆλ‹€.

λ°˜ν™˜κ°’(Return Value)은 ν•¨μˆ˜κ°€ μ»΄ν“¨ν„°μ—κ²Œ λŒλ €μ£ΌλŠ” κ°’μž…λ‹ˆλ‹€. λΆ€μˆ˜ νš¨κ³Όμ™€ 달리 λ°˜ν™˜κ°’μ€ μ‚¬μš©μž λˆˆμ— 보이지 μ•Šκ³  μ½”λ“œ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€. 이 값을 λ‹€λ₯Έ ν•¨μˆ˜μ˜ μž…λ ₯으둜 μ „λ‹¬ν•˜μ—¬ 더 λ³΅μž‘ν•œ λ™μž‘μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

반볡의 λ¬Έμ œμ™€ 루프

고양이가 μ„Έ 번 μ•Όμ˜Ήν•˜κ²Œ λ§Œλ“€κ³  μ‹Άλ‹€λ©΄, κ°€μž₯ λ‹¨μˆœν•œ 방법은 β€œplay sound meow” 블둝을 μ„Έ 번 λ³΅μ‚¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 방식은 μ •ν™•(correct)ν•˜μ§€λ§Œ 잘 μ„€κ³„λ˜μ§€ μ•Šμ€(poorly designed) μ½”λ“œμž…λ‹ˆλ‹€.

μ™œ λ¬Έμ œμΌκΉŒμš”? λ§Œμ•½ μ•Όμ˜Ή μ‚¬μ΄μ˜ λŒ€κΈ° μ‹œκ°„μ„ 1μ΄ˆμ—μ„œ 2초둜 λ°”κΎΈκ³  μ‹Άλ‹€λ©΄, λͺ¨λ“  κ³³μ—μ„œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 6개의 블둝이 μ•„λ‹ˆλΌ 60개, 600개, 6000개라면 μ–΄λ”˜κ°€μ—μ„œ λ°˜λ“œμ‹œ μ‹€μˆ˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 것이 λ°”λ‘œ 루프(Loop)μž…λ‹ˆλ‹€. β€œrepeat 3” 블둝 μ•ˆμ— μ•Όμ˜Ή λ™μž‘μ„ λ„£μœΌλ©΄, ν•œ κ³³μ—μ„œλ§Œ νšŸμˆ˜λ‚˜ λŒ€κΈ° μ‹œκ°„μ„ μˆ˜μ •ν•΄λ„ 전체에 μ μš©λ©λ‹ˆλ‹€. μ½”λ“œλ₯Ό λͺ¨λ“ˆν™”(modularize)ν•˜μ—¬ 곡톡 κΈ°λŠ₯을 ν•œ 곳에 λͺ¨μœΌλ©΄ μœ μ§€λ³΄μˆ˜κ°€ 훨씬 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

좔상화와 μ‚¬μš©μž μ •μ˜ 블둝

더 λ‚˜μ•„κ°€, β€œmeowβ€λΌλŠ” λ™μž‘ 자체λ₯Ό ν•˜λ‚˜μ˜ λΈ”λ‘μœΌλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. Scratch의 β€œMake a Block” κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ MITκ°€ λ§Œλ“€μ§€ μ•Šμ€ μƒˆλ‘œμš΄ 퍼즐 쑰각을 직접 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β€œdefine meowβ€λΌλŠ” 블둝을 λ§Œλ“€κ³  κ·Έ μ•ˆμ— μ†Œλ¦¬ μž¬μƒκ³Ό λŒ€κΈ° λ™μž‘μ„ λ„£μœΌλ©΄, 이제 ν”„λ‘œκ·Έλž¨ μ–΄λ””μ„œλ“  β€œmeow” 블둝 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. κ΅¬ν˜„ 세뢀사항은 μ‹œμ•Όμ—μ„œ 사라지고, μš°λ¦¬λŠ” β€œκ³ μ–‘μ΄κ°€ μ•Όμ˜Ήν•œλ‹€β€λŠ” 높은 μˆ˜μ€€μ˜ κ°œλ…λ§Œ 닀루면 λ©λ‹ˆλ‹€.

여기에 인자(argument)λ₯Ό μΆ”κ°€ν•˜λ©΄ λ”μš± κ°•λ ₯ν•΄μ§‘λ‹ˆλ‹€. β€œmeow n timesβ€λΌλŠ” 블둝을 λ§Œλ“€λ©΄ μ•Όμ˜Ή 횟수λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ μ›ν•˜λŠ” 만큼 λ°˜λ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것이 λ°”λ‘œ 좔상화(Abstraction)의 ν•΅μ‹¬μž…λ‹ˆλ‹€. μ €μˆ˜μ€€μ˜ κ΅¬ν˜„ 세뢀사항을 감좔고, κ³ μˆ˜μ€€μ˜ κ°œλ…λ§ŒμœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

쑰건문과 이벀트 기반 ν”„λ‘œκ·Έλž˜λ°

쑰건문(Conditional)은 ν”„λ‘œκ·Έλž¨μ΄ 상황에 따라 λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. β€œif touching mouse pointer, then play sound meowβ€λΌλŠ” λ‘œμ§μ€ 마우슀 μ»€μ„œκ°€ 고양이 μœ„μ— μžˆμ„ λ•Œλ§Œ μ•Όμ˜Ή μ†Œλ¦¬λ₯Ό λƒ…λ‹ˆλ‹€. 마치 고양이λ₯Ό μ“°λ‹€λ“¬λŠ” 것과 같은 νš¨κ³Όμž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이 쑰건문을 β€œforever” 블둝 없이 μ‚¬μš©ν•˜λ©΄ λ¬Έμ œκ°€ μƒκΉ…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ€ λ„ˆλ¬΄ λΉ¨λΌμ„œ 초둝 κΉƒλ°œμ„ ν΄λ¦­ν•œ μˆœκ°„μ—λ§Œ 쑰건을 ν™•μΈν•˜κ³  μ¦‰μ‹œ μ’…λ£Œλ©λ‹ˆλ‹€. κ·Έ μˆœκ°„ λ§ˆμš°μŠ€κ°€ 고양이 μœ„μ— μ—†μ—ˆλ‹€λ©΄ 아무 일도 μΌμ–΄λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

β€œforever” λΈ”λ‘μœΌλ‘œ 감싸면 ν”„λ‘œκ·Έλž¨μ€ μ§€μ†μ μœΌλ‘œ 쑰건을 ν™•μΈν•©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ–Έμ œ 고양이λ₯Ό 쓰닀듬든 κ·Έ μˆœκ°„μ„ 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œ ν”„λ‘œμ νŠΈ ꡬ좕: Oscar Time κ²Œμž„

Malan κ΅μˆ˜λŠ” μžμ‹ μ΄ μ•½ 20λ…„ 전에 λ§Œλ“  β€œOscar Timeβ€μ΄λΌλŠ” κ²Œμž„μ„ μ˜ˆμ‹œλ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€. ν•˜λŠ˜μ—μ„œ λ–¨μ–΄μ§€λŠ” μ“°λ ˆκΈ°λ₯Ό Oscar의 μ“°λ ˆκΈ°ν†΅μœΌλ‘œ λ“œλž˜κ·Έν•˜μ—¬ 점수λ₯Ό μ–»λŠ” κ²Œμž„μž…λ‹ˆλ‹€. 8~12μ‹œκ°„μ΄ κ±Έλ¦° 이 ν”„λ‘œμ νŠΈλŠ” λ³΅μž‘ν•΄ λ³΄μ΄μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 기본적인 ꡬ성 μš”μ†Œλ“€μ˜ μ‘°ν•©μž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ λΆ„ν•΄ κ³Όμ •:

  1. Oscar 0: κ°€μž₯ λ‹¨μˆœν•œ 버전. μ½”λ“œ 없이 μŠ€ν”„λΌμ΄νŠΈμ™€ 배경만 배치
  2. Oscar 1: Oscar에 쑰건문 μΆ”κ°€. λ§ˆμš°μŠ€κ°€ λ‹ΏμœΌλ©΄ λšœκ»‘μ΄ μ—΄λ¦¬λŠ” μ• λ‹ˆλ©”μ΄μ…˜
  3. Oscar 2: μ“°λ ˆκΈ°μ— 병렬 슀크립트 μΆ”κ°€. λ“œλž˜κ·Έ κ°€λŠ₯ν•˜κ²Œ μ„€μ •ν•˜κ³ , 랜덀 μœ„μΉ˜μ—μ„œ λ–¨μ–΄μ§€λ©°, Oscar에 λ‹ΏμœΌλ©΄ λ‹€μ‹œ μœ„λ‘œ ν…”λ ˆν¬νŠΈ
  4. Oscar 3: 곡톡 μ½”λ“œλ₯Ό β€œgo to topβ€μ΄λΌλŠ” μ‚¬μš©μž μ •μ˜ λΈ”λ‘μœΌλ‘œ μΆ”μΆœν•˜μ—¬ 쀑볡 제거
  5. Oscar 4: score λ³€μˆ˜ μΆ”κ°€. μ“°λ ˆκΈ°κ°€ Oscar에 닿을 λ•Œλ§ˆλ‹€ 점수 증가

이것이 λ°”λ‘œ 점진적 개발(Incremental Development)μž…λ‹ˆλ‹€. κ±°μ°½ν•œ λͺ©ν‘œκ°€ μžˆλ”λΌλ„ μž‘μ€ λ¬Έμ œλΆ€ν„° ν•΄κ²°ν•˜κ³ , ν•œ μž… 크기둜 진전을 이루어 μ΅œμ’… μ†”λ£¨μ…˜μ— λ„λ‹¬ν•©λ‹ˆλ‹€.

IVY’s Hardest Game: κ³ κΈ‰ κ°œλ… 적용

CS50 μ„ λ°°κ°€ λ§Œλ“  β€œIVY’s Hardest Game”은 더 λ³΅μž‘ν•œ κ²Œμž„ 메컀닉을 λ³΄μ—¬μ€λ‹ˆλ‹€.

ν‚€λ³΄λ“œ μž…λ ₯ 처리: β€œlisten for keyboard” ν•¨μˆ˜λŠ” ν™”μ‚΄ν‘œ ν‚€ μž…λ ₯을 κ°μ§€ν•˜κ³  μŠ€ν”„λΌμ΄νŠΈμ˜ μ’Œν‘œλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. μœ„μͺ½ ν™”μ‚΄ν‘œκ°€ 눌리면 Yλ₯Ό 1 μ¦κ°€μ‹œν‚€κ³ , 였λ₯Έμͺ½ ν™”μ‚΄ν‘œκ°€ 눌리면 Xλ₯Ό 1 μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€.

λ²½ 좩돌 처리: β€œfeel for walls” ν•¨μˆ˜λŠ” μŠ€ν”„λΌμ΄νŠΈκ°€ 벽에 λ‹Ώμ•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. 였λ₯Έμͺ½ 벽에 λ‹ΏμœΌλ©΄ Xλ₯Ό -1만큼 λ³€κ²½ν•˜μ—¬ νŠ•κ²¨ λ‚˜μ˜€κ²Œ ν•©λ‹ˆλ‹€. 이미 λ²½ μœ„μ— 살짝 μ˜¬λΌκ°”κΈ° λ•Œλ¬Έμ— ν•œ ν”½μ…€ λ’€λ‘œ λ¬ΌλŸ¬λ‚˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

자율 이동 적: Yale μŠ€ν”„λΌμ΄νŠΈλŠ” μ™Όμͺ½ λ²½μ΄λ‚˜ 였λ₯Έμͺ½ 벽에 λ‹ΏμœΌλ©΄ 180도 νšŒμ „ν•˜κ³ , κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 계속 ν•œ κ±ΈμŒμ”© μ΄λ™ν•©λ‹ˆλ‹€. 이동 속도λ₯Ό 10 steps둜 높이면 κ²Œμž„μ΄ 더 μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€.

좔적 AI: MIT μŠ€ν”„λΌμ΄νŠΈλŠ” β€œpoint towards Harvard”와 β€œmove 1 step”을 forever 루프 μ•ˆμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€. ν”Œλ ˆμ΄μ–΄λ₯Ό 계속 μΆ”μ ν•˜λŠ” 적을 κ΅¬ν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이동 속도λ₯Ό 10으둜 높이면 μ‹œκ°μ  버그가 λ°œμƒν•©λ‹ˆλ‹€. λ„ˆλ¬΄ 빨리 μ΄λ™ν•˜λ‹€ λ³΄λ‹ˆ ν”Œλ ˆμ΄μ–΄λ₯Ό μ§€λ‚˜μ³λ²„λ¦¬κ³ , λ‹€μ‹œ λŒμ•„μ˜€κ³ , 또 μ§€λ‚˜μΉ˜λŠ” 것을 λ°˜λ³΅ν•˜λ©° 덜덜 λ– λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

μΆ”μƒν™”μ˜ 계측: 0κ³Ό 1μ—μ„œ AIκΉŒμ§€

컴퓨터가 μ΄ν•΄ν•˜λŠ” 것은 였직 0κ³Ό 1λΏμž…λ‹ˆλ‹€. β€œHello World”λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ‘°μ°¨ μ‹€μ œλ‘œλŠ” νŠΉμ • νŒ¨ν„΄μ˜ 0κ³Ό 1둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€. Intel, AMD, NVIDIA 같은 νšŒμ‚¬λ“€μ€ μ–΄λ–€ λΉ„νŠΈ νŒ¨ν„΄μ΄ λ§μ…ˆμ„ μ˜λ―Έν•˜κ³ , μ–΄λ–€ νŒ¨ν„΄μ΄ ν™”λ©΄ 좜λ ₯을 μ˜λ―Έν•˜λŠ”μ§€ κ²°μ •ν•©λ‹ˆλ‹€.

초창기 ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ€ νŽ€μΉ˜ μΉ΄λ“œλ‘œ 이 λΉ„νŠΈ νŒ¨ν„΄μ„ 직접 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이것은 λ„ˆλ¬΄ μ§€λ£¨ν–ˆκΈ° λ•Œλ¬Έμ— λˆ„κ΅°κ°€κ°€ 컴파일러(Compiler)λ₯Ό 발λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” ν•œ μ–Έμ–΄λ₯Ό λ‹€λ₯Έ μ–Έμ–΄λ‘œ λ²ˆμ—­ν•˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.

C μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œλŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ 기계어(0κ³Ό 1)둜 λ³€ν™˜λ©λ‹ˆλ‹€. Python μ½”λ“œλŠ” (λ‹¨μˆœν™”ν•˜λ©΄) C둜 λ³€ν™˜λ˜κ³ , λ‹€μ‹œ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 그리고 OpenAI의 API μœ„μ—μ„œ μš°λ¦¬λŠ” 단 10μ€„μ˜ μ½”λ“œλ‘œ 챗봇을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

이것이 μΆ”μƒν™”μ˜ νž˜μž…λ‹ˆλ‹€. 과거의 μ–΄λ €μš΄ λ¬Έμ œλ“€μ„ λˆ„κ΅°κ°€κ°€ 이미 ν•΄κ²°ν•΄ λ†“μ•˜κ³ , κ·Έ μœ„μ— 더 μ‰¬μš΄ 도ꡬλ₯Ό λ§Œλ“€μ—ˆκ³ , μš°λ¦¬λŠ” κ·Έ 도ꡬ듀을 μ‘°ν•©ν•˜μ—¬ 더 λ³΅μž‘ν•œ 것을 λ§Œλ“­λ‹ˆλ‹€. Scratch의 β€œsay” 블둝이 μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€, OpenAI의 GPTκ°€ λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ•Œ ν•„μš” 없이 μš°λ¦¬λŠ” 그것듀을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°λ‘ : 컴퓨터 κ³Όν•™μ˜ 본질

컴퓨터 κ³Όν•™μ˜ λ³Έμ§ˆμ€ μ»΄ν“¨νŒ… 사고(Computational Thinking)μž…λ‹ˆλ‹€. μ΄λŠ” 컴퓨터 κ³Όν•™μ—μ„œ 얻은 톡찰λ ₯을 ν˜„μ‹€ μ„Έκ³„μ˜ 문제 해결에 μ μš©ν•˜λŠ” 사고 λ°©μ‹μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ°μ€ κ·Έ κ³Όμ •μ—μ„œ μ‚¬μš©ν•˜λŠ” 도ꡬ일 λΏμž…λ‹ˆλ‹€.

AI μ‹œλŒ€μ—λ„ 컴퓨터 κ³Όν•™ ꡐ윑이 μ€‘μš”ν•œ μ΄μœ λŠ” λͺ…ν™•ν•©λ‹ˆλ‹€. AIλŠ” κ°•λ ₯ν•œ λ„κ΅¬μ΄μ§€λ§Œ, κ·Έ 도ꡬλ₯Ό 효과적으둜 ν™œμš©ν•˜λ €λ©΄ κΈ°λ³Έ 원리λ₯Ό 이해해야 ν•©λ‹ˆλ‹€. 데이터가 μ–΄λ–»κ²Œ ν‘œν˜„λ˜λŠ”μ§€, μ•Œκ³ λ¦¬μ¦˜μ΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€, μ™œ μ–΄λ–€ 방법이 λ‹€λ₯Έ 방법보닀 νš¨μœ¨μ μΈμ§€λ₯Ό 이해해야 AIλΌλŠ” 쑰수λ₯Ό μ œλŒ€λ‘œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ‹œμŠ€ν…œμ— λŒλ €λ‹€λ‹ˆλŠ” 승객이 μ•„λ‹ˆλΌ, μ‹œμŠ€ν…œμ„ μ™„μ „νžˆ μž₯μ•…ν•œ μ„€κ³„μžκ°€ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 그것이 λ°”λ‘œ 코딩을 ν•˜κΈ° 전에 μ•Œκ³ λ¦¬μ¦˜μ„ λ°°μ›Œμ•Ό ν•˜λŠ” 이유이자, 컴퓨터 κ³Όν•™μ˜ μ§„μ •ν•œ κ°€μΉ˜μž…λ‹ˆλ‹€.

CS50 유λͺ…ν•œ κ°•μ˜λΌλŠ” 것은 μ˜ˆμ „λΆ€ν„° μ•Œκ³  μžˆμ—ˆλŠ”λ°, 정말 μ‰½κ²Œ 잘 μ„€λͺ…ν•΄μ£Όμ‹œλŠ”κ±° κ°™λ„€μš” :)

λ³Έ κ°•μ˜λŠ” CS50의 Introduction Section에 μ†ν•˜λŠ” λ‚΄μš©μž…λ‹ˆλ‹€. (CS50x 2026 - Lecture 0 - Scratch) μ΄μ–΄μ§€λŠ” μ‹œλ¦¬μ¦ˆλ‘œ CS50 μ½”μŠ€ 전체 ν•œλ²ˆ μž‘μ„±ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€!

μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ 🐾



-->