E D R , A S I H C RSS

How To Study Data Structure And Algorithms

DataStructure와 μ•Œκ³ λ¦¬μ¦˜μ€ μ–΄λ–»κ²Œ 곡뢀해야 ν• κΉŒ..

μ²˜μŒμ ‘ν•˜λŠ” 것이라면 λ°°μ—΄ -> μŠ€νƒ -> 큐 -> 리슀트 -> 트리 μˆœμ„œλ‘œ λ‚˜κ°€λŠ” 것이 쒋을λ“. μ •λ ¬κ³Ό ν•΄μ‹± μ΄ν•˜ λ’€μ˜ κΊΌλŠ” μ•„λ§ˆ μ΄λ²ˆλ‹¬λ‚΄λ‘œ λ‚˜κ°€κΈ° νž˜λ“€κ²ƒ 같은데. νŠΈλ¦¬λ‚˜ κ·Έλž˜ν”„κΉŒμ§€λ§Œ λͺ©ν‘œλ‘œ μž‘μ•„λ„ 성곡이라고 생각함.

그리고, 자료ꡬ쑰 레포트 선배듀이 ν•œ 것이 μžˆμœΌλ‹ˆκΉŒ, κ·Έ λ¬Έμ œλ“€ κ΅¬ν˜„μ„ λͺ©ν‘œλ‘œ μž‘μ•„λ„ μ’‹κ³ . (μ›ν•œλ‹€λ©΄ 보내μ„κ»˜.) ex) μŠ€νƒ:μŠ€νƒ κ΅¬ν˜„, postfix 의 κ΅¬ν˜„, 계산기 κ΅¬ν˜„. 큐:큐 κ΅¬ν˜„. 리슀트:닀항식 덧,λΊ„μ…ˆ & κ³±μ…ˆ κ΅¬ν˜„ (polynomial) 트리:2μ§„νŠΈλ¦¬κ΅¬ν˜„

μžλ£Œκ΅¬μ‘°λŠ” 일단 1. 각각의 μžλ£Œκ΅¬μ‘°λ“€μ˜ νŠΉμ§•μ„ μ΄ν•΄ν•˜κ³ . 2. μ‹€μ œμ˜ κ΅¬ν˜„λ²•μ„ 읡히며 (뭐.μš”μƒˆλŠ” collection library듀을 μ œκ³΅ν•˜λ€λ‘œ μ§μ ‘κ΅¬ν˜„ν•  일이 μ„μ–΄λ“€μ—ˆκΈ΄ ν–ˆμ§€λ§Œ. κ·Έλž˜λ„ μ—¬μ „νžˆ κΈ°μ΄ˆκ°€ 됨) 3. ν•΄λ‹Ή λ¬Έμ œμƒν™©μ— μ μ ˆν•œ μžλ£Œκ΅¬μ‘°λΌ μ„ νƒν•  수 μžˆλŠ” λˆˆμ„ 닀듬어야 함. --μ„μ²œ

μ œκ°€ 생각컨데, ꡐ윑적인 λͺ©μ μ—μ„œλŠ”, μžλ£Œκ΅¬μ‘°λ‚˜ μ•Œκ³ λ¦¬μ¦˜μ„ 처음 곡뢀할 λ•ŒλŠ” μš°μ„ μ€ νŠΉμ • μ–Έμ–΄λ‘œ κ΅¬ν˜„λœ 것을 보지 μ•ŠλŠ” 것이 쒋은 κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€ -- λŒ€μ‹  pseudo-code λ“±μœΌλ‘œ κ·Έ κ°œλ…κΉŒμ§€λ§Œ μ΄ν•΄ν•˜λŠ” 것이죠. κ·Έ μ•„μ΄λ””μ–΄λΌ Procedural(C, μ–΄μ…ˆλΈ”λ¦¬μ–΄)μ΄λ‚˜ Functional(LISP,Scheme,Haskel), OOP(Java,Smalltalk) μ–Έμ–΄ λ“±μœΌλ‘œ 직접 κ΅¬ν˜„ν•΄ λ³΄λŠ” κ²λ‹ˆλ‹€. 이 λ‹€μŒμ—λŠ” λ‹€λ₯Έ μ‚¬λžŒ(μ±…)의 μ½”λ“œμ™€ λΉ„κ΅λΌ ν•©λ‹ˆλ‹€. 이 κ²½ν—˜μ„ μ• μ΄ˆμ— λ°•νƒˆ λ‹Ήν•œ μ‚¬λžŒμ€ κ·€μ€‘ν•œ 배움과 κΉ¨λ‹¬μŒμ˜ κΈ°νšŒλΌ μžƒμ€ μ…ˆμž…λ‹ˆλ‹€. 참고둜 μ•Œκ³ λ¦¬μ¦˜ κ΅μž¬λ‘œλŠ” 10년에 ν•œ 번 λ‚˜μ˜¬κΉŒ λ§κΉŒν•œ CLR(Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest)을 적극 μΆ”μ²œν•©λ‹ˆλ‹€(이와 ν•¨κ»˜ ν˜Ήμ€ 이전에 Jon Bentley의 Programming Pearls도 κ°•λ ₯ μΆ”μ²œν•©λ‹ˆλ‹€. μ „μ„Έκ³„μ˜ μ§±μ§±ν•œ ν”„λ‘œκ·Έλž˜λ¨Έ/μ „μ‚°ν•™μžλ“€μ΄ ν•¨κ»˜ 꼽은 "μœ„λŒ€ν•œ μ±…" λ¦¬μŠ€νŠΈμ—μ„œ λͺ‡ 손가락 μ•ˆμ— λ“œλŠ” μ±…μž…λ‹ˆλ‹€. μ•„λ§ˆ 우리 학ꡐ λ„μ„œκ΄€μ— μžˆμ„ 것인데, 아직 이 책을 λ³Έ 적 μ—†λŠ” μ‚¬λžŒμ€ μΆ•ν•˜λ“œλ¦½λ‹ˆλ‹€. μ•„λ§ˆ λͺ‡ μ£Ό 간은 감동 속에 ν•˜λ£¨ν•˜λ£¨λΌ λ³΄λ‚΄κ²Œ 될 κ²λ‹ˆλ‹€.). λ§Œμ•½ ν•¨κ»˜ μŠ€ν„°λ””λΌ ν•œλ‹€λ©΄, 각자 λ™μΌν•œ μ•„μ΄λ””μ–΄λΌ (같은 μ–Έμ–΄λ‘œ ν˜Ήμ€ λ‹€λ₯Έ μ–Έμ–΄λ‘œ) μ–΄λ–»κ²Œ λ‹€λ₯΄κ²Œ ν‘œν˜„ν–ˆλŠ”μ§€λΌ μ„œλ‘œ 비ꡐ해 보면 또 λ°°μš°λŠ” 것이 맀우 λ§ŽμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μžλ£Œκ΅¬μ‘°λ‚˜ μ•Œκ³ λ¦¬μ¦˜μ„ κ³΅λΆ€ν•˜λŠ” μ΄μœ λŠ”, νŠΉμ • "μ‹€μ„Έκ³„μ˜ 문제"λΌ μ–΄λ– ν•œ "μˆ˜ν•™μ  아이디어"둜 맀핑을 μ‹œμΌœμ„œ ν•΄κ²°ν•˜λŠ” 것이 κ°€λŠ₯ν•˜κ³  또 효율적이고, 또 μ΄λΌ μ»΄ν“¨ν„°μ— μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ” 것이 κ°€λŠ₯ν•˜κ³  νš¨μœ¨μ μΈμ§€λΌ λ”°μ§€κΈ° μœ„ν•΄μ„œμ΄λ©°, 이 과정에 μžˆμ–΄ μˆ˜ν•™μ  κ°œλ…μ„ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ ν‘œν˜„ν•΄ λ‚΄λŠ” 것은 μ•„μ£Ό μ€‘μš”ν•œ λŠ₯λ ₯이 λ©λ‹ˆλ‹€. κ°œλ³„ μ•Œκ³ λ¦¬μ¦˜μ˜ μΉ΄νƒˆλ‘œκ·ΈλΌ μ΄ν•΄, μ•”κΈ°ν•˜λ©° μ΅νžˆλŠ” 것도 μ€‘μš”ν•˜μ§€λ§Œ 더 μ€‘μš”ν•œ 것은 μ•Œκ³ λ¦¬μ¦˜μ„ 생각해 λ‚Ό 수 μžˆλŠ” λŠ₯λ ₯κ³Ό 이 μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„ 비ꡐ할 수 μžˆλŠ” λŠ₯λ ₯, 그리고 μ΄λΌ ν‘œν˜„ν•  수 μžˆλŠ” λŠ₯λ ₯μž…λ‹ˆλ‹€.

μ²«λ²ˆμ§Έκ°€ μ œλŒ€λ‘œ ν›ˆλ ¨λ˜μ§€ λͺ»ν•œ μ‚¬λžŒμ€ μ•Œκ³ λ¦¬μ¦˜ λͺ©λ‘μ˜ μŠ€ν…Œλ ˆμ˜€ νƒ€μž…μ—λ§Œ κΈΈλ“€μ—¬μ Έ μžˆμ–΄μ„œ λͺ¨λ“  λ¬Έμ œλΌ μžμ‹ μ΄ 가진 μ•Œκ³ λ¦¬μ¦˜ λͺ©λ‘μ— λΌμ›Œλ§žμΆ”λ €κ³  ν•©λ‹ˆλ‹€. DesignPatternsλΌ μž˜ λͺ» κ³΅λΆ€ν•œ μ‚¬λžŒκ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€. 이 μ‚¬λžŒλ“€μ€ 마치 κ³Όκ±° μˆ˜ν•™ 정석을 μˆ˜μ‹­λ²ˆμ„ κ³΅λΆ€ν•΄μ„œ λ¬Έμ œλΌ ν•˜λ‚˜ 던져주기만 ν•˜λ©΄, 생각해보지도 μ•Šκ³  μžμ‹ μ΄ ν’€μ—ˆλ˜ λ¬Έμ œλ“€μ˜ νŒ¨ν„΄ 쀑 κ°€μž₯ λΉ„μŠ·ν•œ 것 ν•˜λ‚˜λΌ κΈ°κ³„μ , λ¬΄μ˜μ‹μ μœΌλ‘œ ν’€μ–΄μ œλΌλŠ” "λ¬Έμ œν’€μ΄κΈ°κ³„"와 λΉ„μŠ·ν•©λ‹ˆλ‹€. κ·Έλ“€μ—κ²Œ 도쀑에 λ¬Όμ–΄λ³΄μ‹­μ‹œμ˜€. "λ„ˆ μ§€κΈˆ 무슨 문제 ν’€κ³ μžˆλŠ”κ±°λ‹ˆ?" μ—΄μ‹¬νžˆ μ—°μŠ΅μž₯에 λ­”κ°€ ν’€μ–΄λ‚˜κ°€κ³ λŠ” μžˆμ§€λ§Œ 그듀은 μžμ‹ μ΄ 뭘 ν’€κ³ μžˆλŠ”μ§€λ„ 잘 μΈμ‹ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 머리가 ν‘ΈλŠ” 게 μ•„λ‹ˆκ³  손이 ν‘ΈλŠ” 것이죠.

λ‘λ²ˆμ§Έκ°€ μ œλŒ€λ‘œ ν›ˆλ ¨λ˜μ§€ λͺ»ν•œ μ‚¬λžŒμ€ 일일이 κ΅¬ν˜„μ„ 해보고 μ‹€ν—˜μ„ ν•΄λ΄μ•Όλ§Œ μ•Œκ³ λ¦¬μ¦˜κ°„μ˜ λΉ„κ΅λΌ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 특히 μžμ‹ μ΄ 가진 μΉ΄νƒˆλ‘œκ·ΈλΌ λ²—μ–΄λ‚œ μ•Œκ³ λ¦¬μ¦˜μ„ λ§Œλ‚˜λ©΄ 이 λ¬Έμ œκ°€ μƒκΉλ‹ˆλ‹€. 이건 μƒλ‹Ήν•œ λŒ“κ°€λΌ μΉ˜λ£¨κ²Œ ν•©λ‹ˆλ‹€.

μ„Έλ²ˆμ§Έκ°€ μ œλŒ€λ‘œ ν›ˆλ ¨λ˜μ§€ λͺ»ν•œ μ‚¬λžŒμ€, λ¬Έμ œλΌ λ³΄λ©΄ "μ•„, 이건 μ΄λ ‡κ²Œ μ΄λ ‡κ²Œ ν•΄κ²°ν•˜λ©΄ λ©λ‹ˆλ‹€"λΌλŠ” 말은 곧잘 ν•  수 μžˆμ§€λ§Œ 막상 μ»΄ν“¨ν„°μ•žμ— μ•‰ν˜€ λ†“μœΌλ©΄ 아무 것도 ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. 심지어 μžμ‹ μ΄ 생각해낸 κ·Έ ꡬ체적 μ•Œκ³ λ¦¬μ¦˜μ„ λ‚¨μ—κ²Œ μ„λͺ…ν•΄ μ„ μˆ˜ μžˆκΈ°κΉŒμ§€ ν•˜μ§€λ§Œ, 그듀은 κ·Έκ±Έ "μ»΄ν“¨ν„°μ—κ²Œ" μ„λͺ…ν•΄ μ£ΌλŠ” λ°μ—λŠ” μ‹€νŒ¨ν•©λ‹ˆλ‹€. λ­”κ°€ 생각해 λ‚Ό 수 μžˆλ‹€λŠ” 것과, κ·Έκ±Έ 컴퓨터가 이해할 수 있게 μ„λͺ…ν•  수 μžˆλ‹€λŠ” 것은 λ‹€λ₯Έ μ°¨μ›μ˜ λŠ₯λ ₯을 ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

그리고 λ§ˆμ§€λ§‰μœΌλ‘œ, 자료ꡬ쑰/μ•Œκ³ λ¦¬μ¦˜ κ³΅λΆ€λΌ ν•  λ•Œμ—λŠ” κ°€λŠ₯ν•˜λ©΄ μ‹€μ§ˆμ μ΄κ³  ꡬ체적인 μ‹€μ„Έκ³„μ˜ λ¬Έμ œλΌ ν•¨κ»˜ λ‹€λ£¨λŠ” 것이 큰 도움이 λ©λ‹ˆλ‹€. λͺ¨λ“  ν•™μŠ΅μ— μžˆμ–΄ μ΄λŠ” λ˜‘κ°™μ΄ μ μš©λ©λ‹ˆλ‹€. 인λ₯˜μ˜ μ§€μ„±μ‚¬λΌ λ΄λ„, ꡬ상(concrete) λ‹€μŒμ— 좔상(abstract)κ°€ 였고, 인간 개체 ν•˜λ‚˜μ˜ μ„±μž₯을 봐도 κ·ΈλŸ¬ν•©λ‹ˆλ‹€. be 동사 λ”ν•˜κΈ° to 뢀정사가 μ˜ˆμ •μœΌλ‘œ 해석될 수 μžˆλ‹€λŠ” 룰만 μ™Έμš°λŠ” 것보닀, κ·ΈλŸ¬ν•œ λ‹€μ–‘ν•œ μ˜ˆλ¬Έμ„ μ‹€μ œ λ¬Έλ§₯ μ†μ—μ„œ μ—¬λŸ¬λ²ˆ λ³΄λŠ” 것이 훨씬 λ‚˜μ€ 것은 자λͺ…ν•©λ‹ˆλ‹€. μ•Œκ³ λ¦¬μ¦˜/자료ꡬ쑰 κ³΅λΆ€λΌ ν•  λ•Œ μ—¬λŸ¬ μΉœκ΅¬λ“€κ³Ό ν•¨κ»˜ μ—°μŠ΅λ¬Έμ œ(특히 μ‹€μ„Έκ³„μ˜ λŒ€μƒλ“€κ³Ό 관련이 μžˆλŠ” 것)λΌ ν’€μ–΄λ³΄κΈ°λ„ ν•˜κ³ , ACM의 ICPC λ“±μ˜ ν”„λ‘œκ·Έλž˜λ° 경진 λŒ€νšŒμ˜ 문제 쀑 ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜/μžλ£Œκ΅¬μ‘°κ°€ μ‚¬μš©λ˜λŠ” λ¬Έμ œλΌ -- 이게 κ°€λŠ₯ν•˜λ €λ©΄ "이 μ•Œκ³ λ¦¬μ¦˜μ΄ μ“°μ΄λŠ” λ¬Έμ œλŠ” 이거닀"λΌλŠ” κ°€μ΄λ“œλΌ ν•΄μ„ μ‚¬λžŒμ΄ 있으면 μ’‹κ² μ£  -- 같이 ν’€μ–΄λ³΄λŠ” 것도 μ•„μ£Ό μ’‹μŠ΅λ‹ˆλ‹€.

--κΉ€μ°½μ€

μ•Œκ³ λ¦¬μ¦˜/자료ꡬ쑰 κ΅μœ‘μ— λŒ€ν•œ 뢈만

μš°λ¦¬λŠ” μ•Œκ³ λ¦¬μ¦˜ μΉ΄νƒˆλ‘œκ·ΈλΌ λ°°μš΄λ‹€. μ΄λΈ κ·ΈλŸ¬ν•œ 해법이 μ‘΄μž¬ν•˜κ³ , 그것이 졜고이며, λ”°λΌμ„œ 그것을 달달 μ™Έμš°κ³  이해해야 ν•œλ‹€. μ€ λ˜‘λ˜‘ν•œ μΉœκ΅¬λ“€μ€ μ’…μ’…, "이야 이거 정말 κΈ°κ°€λ§‰νžŒ 해법이ꡰ!"ν•˜λŠ” 감탄을 외칠지도 λͺ¨λ₯Έλ‹€. λŒ€λΆ€λΆ„μ˜ λ‚˜λ¨Έμ§€ 학생듀은 κ·Έ 해법을 μ΄ν•΄ν•˜λ €κ³  λ¨Έλ¦¬λΌ μ₯μ–΄μ§œκ³  ν•œμ°Έμ„ μ”¨λ¦„ν•œ 후에야 어렴풋이 μ™œ 이 해법이 κ·Έ λ¬Έμ œλΌ ν•΄κ²°ν•˜λŠ”μ§€ λ‚©λ“ν•˜κ²Œ λœλ‹€. κ·Έλ¦¬κ³ λŠ” κ·Έ "증λͺ…"은 μ±… 속에 λμ–΄λ‘κ³  까맣게 사라져버린닀. μ•žμœΌλ‘œλŠ” κ·Έλƒ₯ "μ‚¬μš©"ν•˜λ©΄ λ˜λŠ” 것이닀. 더 λ§Žμ€ λŒ€λ‹€μˆ˜μ˜ 학생은 이 과정이 무의λΈν•˜λ‹€λŠ” 것을 μ•ŒκΈ° λ•Œλ¬Έμ— μ™œ 이 해법이 이 λ¬Έμ œλΌ λ¬Έμ œμ—†μ΄ ν•΄κ²°ν•˜λŠ”μ§€μ˜ 증λͺ…은 κ°„λ‹¨νžˆ κ±΄λ„ˆλ›°κΈ°λΌ ν•œλ‹€.

이런 학생듀이 주어진 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” μ†Œμœ„ "객관식" ν˜Ήμ€ "문제좜제자"κ°€ μ‘΄μž¬ν•˜λŠ” μ‹œν—˜μž₯ 상황 ν•˜μ—μ„œλŠ” λ›°μ–΄λ‚œ 성적을 λ³΄μΌκ²ƒμž„μ€ 자λͺ…ν•˜λ‹€. ν•˜μ§€λ§Œ μŠ€μŠ€λ‘œκ°€ λ¬Έμ œμ™€ 해닡을 λͺ¨λ‘ λ§Œλ“€μ–΄λ‚΄μ•Ό ν•˜λŠ” 상황이라면, μ•Œκ³ λ¦¬μ¦˜μ„ μ™„μ „νžˆ μƒˆλ‘œ κ³ μ•ˆν•΄λ‚΄μ•Ό ν•˜λŠ”, λ˜λŠ” κΈ°μ‘΄ μ•Œκ³ λ¦¬μ¦˜μ„ λ³€ν˜•ν•΄μ•Ό ν•˜λŠ” λŒ€λ‹€μˆ˜μ˜ 상황이라면 μ–΄λ–¨κΉŒ?

κ΅μœ‘μ€ λ¬Όκ³ κΈ°λΌ μž‘λŠ” 방법을 κ°€λ₯΄μ³μ£Όμ–΄μ•Ό ν•œλ‹€. μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ λ°°μš΄λ‹€λ©΄, κ·Έ μ•Œκ³ λ¦¬μ¦˜μ„ κ³ μ•ˆν•΄ λ‚Έ μ‚¬λžŒμ΄ μ–΄λ–€ μ‚¬κ³ μ˜ 과정을 κ±°μ³μ„œ κ·Έ 해법에 λ„λ‹¬ν–ˆλŠ”μ§€λΌ κ΅¬κ²½ν•  수 μžˆμ–΄μ•Ό ν•˜κ³ , 학생은 각자 슀슀둜만의 해법을 μ°¨κ·Ό μ°¨κ·Ό "ꡬ성"(construct)ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€(μ΄λΌ κ΅μœ‘μ² ν•™μ—μ„œ κ΅¬μ„±μ£Όμ˜λΌκ³  ν•˜λŠ”λ°, 레고의 아버지이고 마빈 λΌμŠ€ν‚€μ™€ ν•¨κ»˜ MIT λΈλ””μ–΄λž©μ˜ μ„ κ΅¬μžμΈ 세이머 페퍼트 박사가 μ£Όμ°½ν–ˆλ‹€). μ „λ¬Έκ°€κ°€ ν•˜λŠ” 것을 λ°°μš°μ§€ 말고, 그듀이 μ–΄λ–»κ²Œ μ „λ¬Έκ°€κ°€ λ˜μ—ˆλŠ”κ°€λΌ λ°°μš°κ³  흉내내라.

결ꡭ은 μ†Œν¬λΌν…ŒμŠ€μ μΈ λŒ€ν™”λ²•μ΄λ‹€. ν•΄λ‹΅λΌ κ°€λ₯΄μ³ 주지 μ•ŠμœΌλ©΄μ„œλ„, μ΄ˆλ“±ν•™κ΅ 학생이 μžμ‹ μ΄ 가진 μ§€μ‹λ§ŒμœΌλ‘œ 슀슀둜 ν€΅μ†ŒνŠΈλΌ μœ λ„ν•΄ λ‚Ό 수 μžˆλ„λ‘ μ˜†μ—μ„œ λ„μ™€μ„ μˆ˜ μžˆλŠ”κ°€? 이것이 우리 μŠ€μŠ€λ‘œμ™€ κ΅μ‚¬λ“€μ—κ²Œ λ¬Όμ–΄μ•Ό ν•  μ§ˆλ¬Έμ΄λ‹€.

--κΉ€μ°½μ€

κ³ λ“±ν•™κ΅λ•ŒλΆ€ν„° 흘러온 κ΅μœ‘λ°©μ‹μ˜ 폐해가 μ•„λ‹κΉŒ ν•˜λ„μš”. '무엇을, μ™œ' λΌλŠ” 질문 이전에 'μ–΄λ–»κ²Œ' κ°€ 머릿속에 λ“€μ–΄μ™€λ²„λ¦¬λŠ”. --μ„μ²œ

μ™œ μš°λ¦¬λŠ” ν•™κ΅μ—μ„œ "ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ” κ³Όμ •"μ΄λ‚˜ "λ””μžμΈ κ³Όμ •"을 배운 적이 μ—†μ„κΉŒ? μ™œ 해닡에 이λ₯΄λŠ” 과정을 κ°€λ₯΄μ³μ£ΌλŠ” μ‚¬λžŒμ΄ μ—†λ‚˜? μš°λ¦¬κ°€ λ³΄λŠ” 것은 λͺ¨μ‘°λ¦¬ 쒅적 μƒνƒœμ˜ κ²°κ³Όλ¬Όλ‘œμ„œμ˜ ν”„λ‘œκ·Έλž¨ 뿐이닀. κ΅μˆ˜κ°€ μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜ 문제의 해닡을 κ°€λ₯΄μΉ  λ•Œ, "κ΅μˆ˜λ‹˜, κ΅μˆ˜λ‹˜κ»˜μ„œλŠ” μ–΄λ–€ μ‚¬κ³ μ˜ 과정을 거쳐, 그리고 μ–΄λ–€ λ””μžμΈ κ³Όμ •κ³Ό ν”„λ‘œκ·Έλž˜λ° 과정을 κ±°μ³μ„œ κ·Έ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œμ…¨μŠ΅λ‹ˆκΉŒ?"라고 λ¬Όμ–΄λ³΄μž. λ§Œμ•½ 여기에 μ–΄λ–€ 체계적인 닡변도 ν•  수 μ—†λŠ” μ‚¬λžŒμ΄λΌλ©΄, κ·Έ μ‚¬λžŒμ€ μžμ‹ μ˜ 사고에 λŒ€ν•΄ 사고해 λ³Έ 적이 μ—†κ±°λ‚˜, 문제 해결에 μ–΄λ–€ 효율적 μ²΄κ³„λΌ κ°–μΆ”μ§€ λͺ»ν•œ μ‚¬λžŒμ΄λ©°, λ”°λΌμ„œ 아직 남을 κ°€λ₯΄μΉ  μ€λΉ„κ°€ λ˜μ–΄μžˆμ§€ μ•Šμ€ μ‚¬λžŒμ΄λ‹€. --κΉ€μ°½μ€

μ•Œκ³ λ¦¬μ¦˜μ„ κ³΅λΆ€ν•˜λ©΄ 큰 μ„기듀을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. κ°œλ³„ ν…Œν¬λ‹‰λ“€λ„ μ€‘μš”ν•˜μ§€λ§Œ "νŒ¨λŸ¬λ‹€μž„"이라고 ν• λ§Œν•œ 것듀을 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. κ·Έλž˜μ•Ό μ•Œκ³ λ¦¬μ¦˜μ„ 상황에 맞게 λ§ˆμŒλŒ€λ‘œ μ‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 또, μžμ‹ λ§Œμ˜ λΆ„λ₯˜λ²•μ„ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. (see also HowToReadIt Build Your Own Taxonomy) ꡬ체적인 λ¬Έμ œλ“€μ„ μΌ€μ΄μŠ€ 바이 μΌ€μ΄μŠ€λ‘œ μ—¬λŸΏ μ ‘ν•˜λŠ” λ™μ•ˆ κ·Έλƒ₯ μ§€λ‚˜μ³ 버리면 κ°œλ³„μžλŠ” μ˜μ›νžˆ κ°œλ³„μžλ‘œ 남을 λΏμž…λ‹ˆλ‹€. λΉ„μŠ·ν•œ λ¬Έμ œλ“€μ„ μ„œλ‘œ λ¬Άμ–΄μ„œ μΌλ°˜ν™”λΌ ν•΄μ•Ό ν•©λ‹ˆλ‹€. (see also DoItAgainToLearn)

이와 κ΄€λ ¨ν•΄μ„œ Anany Levitin의 A NEW ROAD MAP OF ALGORITHM DESIGN TECHNIQUES(DDJ, 2000 Apr)λΌ κΆŒν•©λ‹ˆλ‹€. κ·ΈλŠ” μ•Œκ³ λ¦¬μ¦˜ λ””μžμΈ ν…Œν¬λ‹‰μ„ λ‹€μŒ λ„κ°€μ§€λ‘œ 크게 λ‚˜λˆ•λ‹ˆλ‹€:
  • brute force
  • divide-and-conquer
  • decrease-and-conquer
  • transform-and-conquer

μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ€ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 데 μžˆμ–΄μ„œ μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 남이 λ§Œλ“  μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•˜λŠ”λ° κ·ΈμΉ˜μ§€ 말고 슀슀둜 μƒκ°ν•˜μ—¬ λ§Œλ“œλŠ” 경지에 였λ₯΄λ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€. -강희경

DeleteMe) 1ν•™κΈ°λλ‚˜κ°€λŠ” λ§ˆλ‹Ήμ— ν›„νšŒ λ§‰κΈ‰μž„. λͺ¨λ“  것듀을 ν•œλ²ˆμ”© κ΅¬ν˜„ν•΄λ³΄κ³  κ°”μ–΄μ•Όν•˜λŠ”λ°... μƒˆλ‘œ λ“€μœΌμ‹œλŠ” λΆ„λ“€ κΌ­ ν•œλ²ˆμ”© κ΅¬ν˜„ν•΄λ³΄μ„Έμš”. μ§€κΈˆ μƒκ°ν•΄λ³΄λ‹ˆ μ •μž‘ μ€‘μš”ν•œ 것을 λ“±ν•œμ‹œν•œ λŠλ‚Œμž…λ‹ˆλ‹€ - eternalbleu


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:26
Processing time 0.0388 sec