[Book] ν΄λ¦°μ½”λ“œ - 3μž₯ ν•¨μˆ˜
Β·
πŸ“ Book/✏ Clean Code
3μž₯ ν•¨μˆ˜ μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ΄λ“  κ°€μž₯ 기본적인 λ‹¨μœ„λŠ” ν•¨μˆ˜μ΄λ‹€. μ˜λ„λ₯Ό λΆ„λͺ…νžˆ ν‘œν˜„ν•˜λŠ” ν•¨μˆ˜λŠ” μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  수 μžˆμ„κΉŒ? ν•¨μˆ˜μ— μ–΄λ–€ 속성을 λΆ€μ—¬ν•΄μ•Ό 처음 μ½λŠ” μ‚¬λžŒμ΄ ν”„λ‘œκ·Έλž¨ λ‚΄λΆ€λ₯Ό μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμ„κΉŒ? 1. μž‘κ²Œ λ§Œλ“€μ–΄λΌ ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 첫째 κ·œμΉ™μ€ `μž‘κ²Œ`이닀. 일반적으둜 5쀄 μ΄λ‚΄λ‘œ 쀄여야 λ§ˆλ•…ν•˜λ‹€. 2. 블둝과 λ“€μ—¬μ“°κΈ° if λ¬Έ, else, λ¬Έ, whileλ¬Έ 등에 λ“€μ–΄κ°€λŠ” 블둝은 ν•œ 쀄이어야 ν•œλ‹€. λŒ€κ²Œ κ±°κΈ°μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€. 3. ν•œ κ°€μ§€λ§Œ 해라 ν•¨μˆ˜λŠ” ν•œ κ°€μ§€λ§Œμ„ μž˜ν•΄μ•Ό ν•œλ‹€. ν•œ κ°€μ§€ μž‘μ—…λ§Œ ν•˜λŠ” ν•¨μˆ˜λŠ” μžμ—°μŠ€λŸ½κ²Œ μ„Ήμ…˜μœΌλ‘œ λ‚˜λˆ„κΈ° μ–΄λ ΅λ‹€. 4. ν•¨μˆ˜ λ‹Ή 좔상화 μˆ˜μ€€μ€ ν•˜λ‚˜λ‘œ ν•¨μˆ˜κ°€ ν™•μ‹€νžˆ ν•œ κ°€μ§€ μž‘μ—…λ§Œ ν•˜λ €λ©΄ ν•¨μˆ˜ λ‚΄ λͺ¨λ“  λ¬Έμž₯의 좔상화 μˆ˜μ€€μ΄ 동일해야 ν•œλ‹€. ν•œ ν•¨μˆ˜ 내에 좔상화 ..
[Book] ν΄λ¦°μ½”λ“œ - 1μž₯ κΉ¨λ—ν•œ μ½”λ“œ, 2μž₯ 의미 μžˆλŠ” 이름
Β·
πŸ“ Book/✏ Clean Code
1μž₯ κΉ¨λ—ν•œ μ½”λ“œ κΉ¨λ—ν•œ μ½”λ“œλž€? 이 단어에 λŒ€ν•œ λ‹€μ–‘ν•œ μ •μ˜κ°€ μ‘΄μž¬ν•˜λŠ”λ° μ•„λž˜λŠ” 우리 λΆ„μ•Όμ—μ„œ 유λͺ…ν•œ ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ΄ λ§ν•œ μ •μ˜μ΄λ‹€. μš°μ•„ν•˜λ‹€: λ³΄λŠ” μ‚¬λžŒμ—κ²Œ 즐거움을 μ„ μ‚¬ν•œλ‹€. νš¨μœ¨μ μ΄λ‹€: λ‹¨μˆœνžˆ μ†λ„λ§Œμ„ λœ»ν•˜μ§€ μ•Šκ³  CPU μžμ› λ“± λ§Žμ€ 것을 λœ»ν•œλ‹€. μ² μ €ν•œ 였λ₯˜ μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ‹€: λ©”λͺ¨λ¦¬ λˆ„μˆ˜, 경쟁 μƒνƒœ, 일관성 μ—†λŠ” λͺ…λͺ…법 등을 μ‘°μ‹¬ν•˜μž. ν•œ κ°€μ§€λ₯Ό μž˜ν•œλ‹€: λ‚˜μœ μ½”λ“œλŠ” λ„ˆλ¬΄ λ§Žμ„ 일을 ν•˜λ €λ‹€ μ˜λ„κ°€ λ’€μ„žμ΄μ§€λ§Œ κΉ¨λ—ν•œ μ½”λ“œλŠ” ν•œ 가지에 μ§‘μ€‘ν•œλ‹€. 가독성이 μ’‹λ‹€: 잘 μ“΄ λ¬Έμž₯처럼 μ½ν˜€μ•Ό ν•œλ‹€. λ‹€λ₯Έ μ‚¬λžŒμ΄ 고치기 쉽닀. 주의 깊게 μ§°λ‹€λŠ” λŠλ‚Œμ„ μ€€λ‹€. μž‘κ²Œ μΆ”μƒν™”ν•œλ‹€. 쀑볡이 μ—†λ‹€. 2μž₯ 의미 μžˆλŠ” 이름 λ³€μˆ˜, ν•¨μˆ˜, μΈμˆ˜μ™€ 클래슀, μ†ŒμŠ€ 파일, μ†ŒμŠ€ 파일 λ‚΄ 디렉터리 λ“± μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ 이름은 μ–΄λ””..
[Book] Effective C# - CHAPTER 3 μ œλ„€λ¦­ ν™œμš©
Β·
πŸ“ Book/✏ Effective
μ œλ„€λ¦­μ€ μ»¬λ ‰μ…˜ 외에도 μΈν„°νŽ˜μ΄μŠ€, 이벀트 ν•Έλ“€λŸ¬, 곡톡 μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ λ“± 맀우 λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ ν™œμš©λœλ‹€. μ•„μ΄ν…œ 18. λ°˜λ“œμ‹œ ν•„μš”ν•œ μ œμ•½ 쑰건만 μ„€μ •ν•˜λΌ νƒ€μž… λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ μ œμ•½ 쑰건은 ν΄λž˜μŠ€κ°€ μž‘μ—…μ„ μ˜¬λ°”λ₯΄κ²Œ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œ νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ 전달할 수 μžˆλŠ” νƒ€μž…μ˜ μœ ν˜•μ„ μ œν•œν•˜λŠ” 방법이닀. μ œμ•½ 쑰건은 μ œλ„€λ¦­ νƒ€μž…μ— λŒ€ν•΄ μš°λ¦¬κ°€ κ°€μ •ν•˜κ³  μžˆλŠ” 사싀을 μ»΄νŒŒμΌλŸ¬μ™€ λ‹€λ₯Έ κ°œλ°œμžμ—κ²Œ μ•Œλ €μ£ΌλŠ” μš©λ„λ‘œ μ‚¬μš©λœλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ νƒ€μž…μ΄ μ œμ•½ 쑰건으둜 μ„€μ •ν•œ κΈ°λŠ₯을 λͺ¨λ‘ κ΅¬ν˜„ν•˜κ³  μžˆμ„ 것이라 κ°€μ •ν•  수 μžˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” μ œλ„€λ¦­ νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” μ‚¬μš©μžκ°€ νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ μ˜¬λ°”λ₯Έ νƒ€μž…μ„ μ§€μ •ν–ˆλŠ”μ§€ 컴파일 νƒ€μž„μ— 확인할 수 μžˆλ‹€. μ œμ•½ 쑰건을 μ„€μ •ν•˜λŠ” λŒ€μ‹  ν˜•λ³€ν™˜μ΄λ‚˜ λŸ°νƒ€μž„μ— ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ„λ‘ μž‘..
[Book] Effective C# - CHAPTER 2 .NET λ¦¬μ†ŒμŠ€ 관리
Β·
πŸ“ Book/✏ Effective
μ•„μ΄ν…œ 11. .NET λ¦¬μ†ŒμŠ€ 관리에 λŒ€ν•œ 이해 .NET ν™˜κ²½μ—μ„œλŠ” νŠΉλ³„νžˆ λ©”λͺ¨λ¦¬ 관리와 κ°€λΉ„μ§€ μˆ˜μ§‘κΈ°μ˜ λ™μž‘ 방식을 μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. κ°€λΉ„μ§€ μˆ˜μ§‘κΈ°(Garbage Collector)λŠ” κ΄€λ¦¬λ˜λŠ” λ©”λͺ¨λ¦¬λ₯Ό κ΄€μž₯ν•˜λ©° λ„€μ΄ν‹°λΈŒ ν™˜κ²½κ³ΌλŠ” λ‹€λ₯΄κ²Œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜, λŒ•κΈ€λ§ 포인터, μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ 포인터, μ—¬νƒ€μ˜ λ©”λͺ¨λ¦¬ 관리 문제λ₯Ό κ°œλ°œμžλ“€μ΄ 직접 닀루지 μ•Šλ„λ‘ μžλ™ν™”ν•΄μ€€λ‹€. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°, COM 객체, μ‹œμŠ€ν…œ 객체 λ“±κ³Ό 같은 비관리 λ¦¬μ†ŒμŠ€λŠ” μ—¬μ „νžˆ κ°œλ°œμžκ°€ 관리해야 ν•œλ‹€. μˆœν™˜ 참쑰의 λ¬Έμ œλ‚˜ λ³΅μž‘ν•œ μ—°κ΄€ κ΄€κ³„μ˜ λ¬Έμ œλ„ 관리 ν™˜κ²½μ—μ„œλŠ” 비ꡐ적 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€. κ°€λΉ„μ§€ μˆ˜μ§‘κΈ°μ˜ λ™μž‘ 방식 마크/콀팩트 μ•Œκ³ λ¦¬μ¦˜μ€ μ—¬λŸ¬ 객체 μ‚¬μ΄μ˜ μ—°κ΄€ 관계λ₯Ό 효율적으둜 νŒŒμ•…ν•˜μ—¬ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό μžλ™μœΌλ‘œ 제..
[C++] μ΅œμ†Œ μ‹ μž₯ 트리(크루슀칼)
Β·
πŸ“ Computer Science/✏ Algorithm
μ΅œμ†Œ μ‹ μž₯ 트리(Minimum Spanning Tree) λͺ¨λ“  정점을 μ—°κ²°ν•˜λŠ” 트리λ₯Ό μ‹ μž₯ 트리라고 ν•˜λŠ”λ° κ°€μ€‘μΉ˜λ₯Ό κ°–λŠ” μ‹ μž₯ 트리 쀑 κ°€μ€‘μΉ˜μ˜ 합이 κ°€μž₯ μž‘μ€ μ‹ μž₯ 트리λ₯Ό μ΅œμ†Œ μ‹ μž₯ 트리라고 ν•œλ‹€. λŒ€ν‘œμ μœΌλ‘œ 크루슀칼 μ•Œκ³ λ¦¬μ¦˜μ΄ 있으며, κ·Έ 외에도 ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜κ³Ό 솔린 μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆλ‹€. ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜: μž„μ˜μ˜ 정점을 루트 λ…Έλ“œλ‘œ μ‚½μž…ν•œ ν›„ μΈμ ‘ν•œ μ •μ μ˜ κ°„μ„  쀑 κ°€μž₯ μž‘μ€ 정점을 νŠΈλ¦¬μ— μ‚½μž…ν•˜λ©° μ΅œμ†Œ μ‹ μž₯ 트리λ₯Ό λ§Œλ“ λ‹€. 솔린 μ•Œκ³ λ¦¬μ¦˜ 1. 크루슀칼 μ•Œκ³ λ¦¬μ¦˜(Kruskal's algorithm) 1) κΈ°λ³Έ 원리 λͺ¨λ“  κ°„μ„ μ˜ κ°€μ€‘μΉ˜λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ ν›„ κ·Έ λͺ©λ‘μ„ μ°¨λ‘€λŒ€λ‘œ μˆœνšŒν•˜λ©° 사이클이 생기지 μ•Šλ„λ‘ μ΅œμ†Œ μ‹ μž₯ νŠΈλ¦¬μ— μ‚½μž…ν•˜λ©° μ΅œμ†Œ μ‹ μž₯ 트리λ₯Ό λ§Œλ“ λ‹€. 2) 문제 www.acmicpc.net/pr..
[C++] μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree)
Β·
πŸ“ Computer Science/✏ Algorithm
μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree) λ°°μ—΄ λ‚΄ λ²”μœ„ 값을 κ΅¬ν•˜κ±°λ‚˜ νŠΉμ • λ²”μœ„μ˜ 값듀을 λ³€κ²½ν•  λ•Œ λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. 이름 κ·ΈλŒ€λ‘œ ꡬ간듀을 λ³΄μ‘΄ν•˜κ³  μžˆλŠ” νŠΈλ¦¬μ΄λ‹€. 리프 λ…Έλ“œλŠ” λ°°μ—΄μ˜ κ·Έ 수 자체λ₯Ό μ˜λ―Έν•˜κ³  리프 λ…Έλ“œ μ™Έ λ…Έλ“œλ“€μ€ μžμ‹ λ…Έλ“œλ₯Ό λŒ€ν‘œν•˜λŠ” 값이닀. 리프 λ…Έλ“œλ₯Ό μ œμ™Έν•œ λ…Έλ“œλŠ” λΉ„μ›Œμ ΈμžˆλŠ”λ°, μ„Έκ·Έλ¨ΌνŠΈ 트리의 λͺ©μ μ— 따라 μ±„μ›Œμ•Όν•œλ‹€. κΈ°λ³Έ 원리 : ν•© https://www.acmicpc.net/blog/view/9 μ„Έκ·Έλ¨ΌνŠΈ 트리 (Segment Tree) 문제 λ°°μ—΄ Aκ°€ 있고, μ—¬κΈ°μ„œ λ‹€μŒκ³Ό 같은 두 연산을 μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” 문제λ₯Ό μƒκ°ν•΄λ΄…μ‹œλ‹€. ꡬ간 l, r (l ≤ r)이 μ£Όμ–΄μ‘Œμ„ λ•Œ, A[l] + A[l+1] + ... + A[r-1] + A[r]을 κ΅¬ν•΄μ„œ 좜λ ₯ν•˜κΈ° i번째 수λ₯Ό v둜 ..