λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Computer Science/DS & Algorithm5

Linear Data Structure : μŠ€νƒ, 큐, 덱 κ°œλ… 자료 κ°„μ˜ μ—°κ²° ν˜•νƒœμ— 따라 자료ꡬ쑰의 μ’…λ₯˜λ₯Ό κ΅¬λ³„ν–ˆμ„ λ•Œ, 자료λ₯Ό 순차적으둜 λ‚˜μ—΄ν•œ ν˜•νƒœλ₯Ό μ„ ν˜• 자료ꡬ쑰라고 ν•œλ‹€. ν•˜λ‚˜μ˜ 자료 뒀에 λ‹€λ₯Έ ν•˜λ‚˜μ˜ μžλ£Œκ°€ μ˜€λŠ” ν˜•μ‹μœΌλ‘œ μ„ ν˜• 자료ꡬ쑰 μ•ˆμ—μ„œλ„ κΈ°λ³Έ, μ œν•œμœΌλ‘œ λ‚˜λ‰œλ‹€. 이 κΈ€μ—μ„œλŠ” μ œν•œ μ„ ν˜• μžλ£Œκ΅¬μ‘°μ— μ†ν•˜λŠ” μŠ€νƒ, 큐, 덱에 λŒ€ν•΄ μ •λ¦¬ν•œλ‹€. μŠ€νƒ(Stack) μŠ€νƒ, 큐, 덱의 κ°€μž₯ 큰 차이점은 λ°μ΄ν„°μ˜ μΆœμž… λ°©ν–₯이닀. μŠ€νƒμ€ 데이터가 λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ” 길이 ν•œ λ°©ν–₯ 밖에 μ—†μ–΄μ„œ 데이터λ₯Ό μŠ€νƒμ—μ„œ λΊ„ 경우 μœ„μ˜ 사진과 같이 λ“€μ–΄μ˜¨ 곳으둜 λ‚˜κ°€κ²Œ λœλ‹€. 책을 μŒ“λŠ” κ²ƒμ²˜λŸΌ μ•„λž˜μͺ½λΆ€ν„° 값이 차곑차곑 μŒ“μ΄κΈ° λ•Œλ¬Έμ— λ‚˜μ€‘μ— λ“€μ–΄μ˜¨ 데이터가 λ¨Όμ € λ‚˜κ°€λŠ” LIFO(Last In First Out, ν›„μž…μ„ μΆœ) ꡬ쑰이닀. μœ„ μ΄λ―Έμ§€μ²˜λŸΌ μ„Έλ‘œ ν˜•νƒœλ‘œ μŠ€νƒμ„ μ„€λͺ…ν•˜λŠ” κ·Έ.. 2021. 7. 4.
Divide and Conquer : λΆ„ν•  정볡 - 퀡 μ •λ ¬ κ°œλ… 배열을 λ‘˜λ‘œ λΆ„ν• ν•˜κ³  λΆ„ν• ν•œ 배열을 μž¬κ·€ 호좜둜 μ •λ ¬ν•˜μ—¬ ν•˜λ‚˜μ˜ λ°°μ—΄λ‘œ λ§Œλ“ λ‹€λŠ” 점이 합병정렬과 λΉ„μŠ·ν•˜μ§€λ§Œ, 쒌/우λ₯Ό κ· λ“±λΆ„ν• ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. pivot(κΈ°μ€€ μ›μ†Œ)을 μ„ μ •ν•˜μ—¬ pivot보닀 μž‘μ€ μ›μ†ŒλŠ” λͺ¨λ‘ μ™Όμͺ½ λ°°μ—΄λ‘œ, ν¬κ±°λ‚˜ 같은 μ›μ†ŒλŠ” λͺ¨λ‘ 였λ₯Έμͺ½ λ°°μ—΄λ‘œ 가도둝 λΆ„ν• ν•œλ‹€. * μœ„μ˜ μ΄λ―Έμ§€μ—μ„œ 검은색 배경의 μˆ«μžκ°€ pivot νŠΉμ§• β–ͺ λΆˆμ•ˆμ • μ •λ ¬ β–ͺ 비ꡐ μ •λ ¬(κ°’ 비ꡐ에 κΈ°λ°˜ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜) β–ͺ μž¬κ·€ 호좜이 ν•œλ²ˆ 진행될 λ•Œλ§ˆλ‹€ μ΅œμ†Œν•œ ν•˜λ‚˜μ˜ μ›μ†ŒλŠ” μœ„μΉ˜κ°€ κ²°μ •λ˜κΈ° λ•Œλ¬Έμ— λ°˜λ“œμ‹œ λλ‚˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λΌλŠ” 것을 보μž₯ κ°€λŠ₯ 흐름 β‘  pivot μ„ μ • β‘‘ [λΆ„ν• ] pivot보닀 μž‘μ€ μ›μ†Œλ“€μ΄ μ•žμ— 였고, λ’€μ—λŠ” 값이 ν¬κ±°λ‚˜ 같은 λͺ¨λ“  μ›μ†Œλ“€μ΄ μ˜€λ„λ‘ 배열을 λ‘˜λ‘œ λΆ„ν•  β‘’ [정볡] λΆ€λΆ„ 배열을 μ •λ ¬(λ°°μ—΄.. 2021. 4. 18.
Divide and Conquer : λΆ„ν•  정볡 - 이뢄탐색, 합병정렬 κ°œλ… 문제의 μž…λ ₯ 사둀λ₯Ό 두 개 μ΄μƒμ˜ μž‘μ€ μΌ€μ΄μŠ€λ‘œ λΆ„ν• ν•œ ν›„ λΆ„ν• ν•œ μž…λ ₯의 닡을 λ°”λ‘œ ꡬ할 수 μžˆλ‹€λ©΄ μ›λž˜ 문제의 닡은 λΆ„ν• λ‘œ 얻은 닡듀을 톡해 ꡬ할 수 μžˆλŠ” 방식. μƒμœ„ μž…λ ₯ μ‚¬λ‘€μ˜ 해닡을 ν•˜μœ„ μž…λ ₯ 사둀 해닡을 μ΄μš©ν•΄ κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— ν•˜ν–₯식(top-down) 풀이 방식에 μ†ν•œλ‹€. μ˜ˆμ‹œ 1) 이뢄탐색 10 12 15 16 18 20 25 27 42 43 이뢄탐색을 μ‚¬μš©ν•˜λ €λ©΄ 배열이 이미 μ •λ ¬λœ μƒνƒœμ—¬μ•Ό ν•œλ‹€. μœ„μ™€ 같은 λ°°μ—΄μ—μ„œ 27이 λ°°μ—΄ μ•ˆμ— μžˆλŠ”μ§€ ν™•μΈν•œλ‹€κ³  κ°€μ •ν•˜μž. β‘  [λΆ„ν• ] κ°€μš΄λ°μ— μœ„μΉ˜ν•œ μ›μ†Œλ₯Ό κΈ°μ€€μœΌλ‘œ 배열을 λ‚˜λˆ„κ³  μ°ΎλŠ” 값이 κ°€μš΄λ° μ›μ†Œλ³΄λ‹€ μž‘μœΌλ©΄ μ™Όμͺ½ λ°°μ—΄, 크면 였λ₯Έμͺ½ 배열을 선택 β‘‘ [정볡] β‘ μ—μ„œ μ„ νƒν•œ 뢀뢄에 찾고자 ν•˜λŠ” 값이 μžˆλŠ”μ§€ μž¬κ·€μ μœΌλ‘œ 이뢄 검색 β‘’ [병합] β‘‘μ—μ„œ.. 2021. 4. 16.
Greedy : νƒμš•λ²• κ°œλ… 맀 μˆœκ°„λ§ˆλ‹€ κ·Έ μƒν™©μ—μ„œ κ°€μž₯ 졜적인 선택을 ν•˜λŠ” 방식. 각 λ‹¨κ³„μ—μ„œ λ‚΄λ¦° 결정이 μ „μ²΄λ‘œ 봀을 λ•Œλ„ 졜적일 κ±°λΌλŠ” 보μž₯은 μ—†λ‹€. μœ„ 사진을 μ°Έκ³ ν•˜μ—¬ μ„Έ 숫자의 합이 κ°€μž₯ 컀질 수 μžˆλŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μž. μ‹€μ œλ‘œ κ°€μž₯ 큰 μˆ˜λŠ” 109μ§€λ§Œ Greedy algorithm의 결과둜 λ‚˜μ˜¨ 값은 25κ°€ λœλ‹€. μ—¬κΈ°μ„œ 첫 μ€„μ˜ '맀 μˆœκ°„λ§ˆλ‹€ κ·Έ μƒν™©μ—μ„œ κ°€μž₯ 졜적인 선택을 ν•˜λŠ” 방식'을 λ– μ˜¬λ¦΄ 수 μžˆλ‹€. Greedy algorithm에 λ”°λ₯Έ 숫자 선택 과정은 μ•„λž˜μ™€ κ°™λ‹€. β‘  7μ—μ„œ μ‹œμž‘ β‘‘ 3κ³Ό 12λ₯Ό λ§Œλ‚¬μ„ λ•Œ 더 큰 수인 12 선택(3을 선택할 경우 99둜 갈 수 μžˆμ§€λ§Œ 미래의 선택에 λŒ€ν•΄μ„œ μƒκ°ν•˜μ§€ μ•ŠμŒ) β‘’ 12μ—μ„œ 5, 6을 λ§Œλ‚¬μ„ λ•Œ 더 큰 수인 6 선택 ν•˜μ§€λ§Œ νƒμš•λ²•μ„ μ΄μš©ν•΄ 항상 λΆ€λΆ„ μ΅œμ ν•΄λ₯Ό .. 2021. 2. 23.
[μ’…λ§ŒλΆ] μ•Œκ³ λ¦¬μ¦˜ 섀계 νŒ¨λŸ¬λ‹€μž„ - λ¬΄μ‹ν•˜κ²Œ ν’€κΈ° Brute-force (=exhaustive search) μ»΄ν“¨ν„°μ˜ 계산 λŠ₯λ ₯을 μ΄μš©ν•΄ κ°€λŠ₯ν•œ 경우의 수λ₯Ό λͺ¨λ‘ λ‚˜μ—΄ν•˜λ©΄μ„œ 닡을 μ°ΎλŠ” 방법 1. μž¬κ·€ 호좜과 μ™„μ „ 탐색 β—½ μž¬κ·€ 호좜 μžμ‹ μ΄ μˆ˜ν–‰ν•  μž‘μ—…μ„ μœ μ‚¬ν•œ ν˜•νƒœμ˜ μ—¬λŸ¬ 쑰각으둜 μͺΌκ°  λ’€ κ·Έ 쀑 ν•œ 쑰각을 μˆ˜ν–‰ν•˜κ³ , λ‚˜λ¨Έμ§€λ₯Ό 자기 μžμ‹ μ„ ν˜ΈμΆœν•΄ μ‹€ν–‰ν•˜λŠ” κ³Όμ • μž¬κ·€ ν˜ΈμΆœμ— μ‚¬μš©λ˜λŠ” ν•¨μˆ˜κ°€ μž¬κ·€ ν•¨μˆ˜ ex) 1λΆ€ν„° nκΉŒμ§€μ˜ ν•© Base case : 더 이상 λ‚˜λˆŒ 수 μ—†λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ μž‘μ—… ex) 1λΆ€ν„° nκΉŒμ§€μ˜ ν•©μ—μ„œ n이 1이면 return 1 μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  μž…λ ₯이 base case의 닡을 μ΄μš©ν•΄ 계산될 수 μžˆλ„λ‘ base caseλ₯Ό 선택해야 함 πŸ”‘ Boggle game β‘  문제의 λΆ„ν•  β–« μ‹œμž‘ μœ„μΉ˜ κΈ€μžκ°€ 주어진 단어 첫 κΈ€μžμ™€ λ‹€λ₯΄λ©΄ False.. 2020. 11. 7.