CS 12

[μ•Œκ³ λ¦¬μ¦˜] 이진 탐색(이뢄 탐색)

πŸ“Œμ΄μ§„ 탐색(Binary Search)μ£Όμ–΄μ§„ λ°°μ—΄μ˜ 쀑간값과 μ°Ύκ³ μžν•˜λŠ” ν‚€κ°’μ˜ λŒ€μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬, 배열을 절반으둜 λ‚˜λˆ„μ–΄κ°€λ©° κ°’μ˜ 유무λ₯Ό νƒμƒ‰ν•˜λŠ” 검색 μ•Œκ³ λ¦¬μ¦˜. 쀑간값이 킀값보닀 크면 반으둜 λ‚˜λˆˆ λ°°μ—΄μ˜ 였λ₯Έμͺ½ λΆ€λΆ„μ—μ„œ λ‹€μ‹œ νƒμƒ‰ν•˜κ³ , 쀑간값이 킀값보닀 μž‘λ‹€λ©΄ μ™Όμͺ½ λ°°μ—΄μ—μ„œ μž¬νƒμƒ‰ν•œλ‹€. ν•œ 번 비ꡐ할 λ•Œλ§ˆλ‹€ 배열이 절반으둜 μ€„μ–΄λ“€κ²Œ λ˜λ―€λ‘œ λ°°μ—΄μ˜ 크기가 컀지더라도 검색 효율이 μ’‹λ‹€. μ‹œκ°„ λ³΅μž‘λ„λŠ” `O(logN)`.  단, ν‚€κ°’κ³Ό μ€‘κ°„κ°’μ˜ λŒ€μ†Œλ₯Ό λΉ„κ΅ν•˜κΈ° λ•Œλ¬Έμ— 배열이 λ°˜λ“œμ‹œ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.    πŸ“Œκ΅¬ν˜„μ–Έμ–΄: C #include int BinarySearch(int* arrPtr, int lower, int upper, int middle, int key) { // 인덱슀 λ°˜ν™˜ i..

[μ•Œκ³ λ¦¬μ¦˜] νž™ μ •λ ¬(Heap Sort)

πŸ“Œνž™μ΄λž€?'λΆ€λͺ¨ λ…Έλ“œ(κ°’)κ°€ μžμ‹ λ…Έλ“œ(κ°’)보닀 항상 κ°™κ±°λ‚˜ 크닀'λΌλŠ” 쑰건을 λ§Œμ‘±ν•˜λŠ” μ™„μ „ μ΄μ§„νŠΈλ¦¬. μ£Όμ–΄μ§„ 데이터λ₯Ό νž™μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ μ΅œλŒ“κ°’μ€ 항상 루트 λ…Έλ“œμ— μœ„μΉ˜ν•˜κ²Œ 되며(단, 같은 λΆ€λͺ¨λ₯Ό κ³΅μœ ν•˜λŠ” ν˜•μ œ λ…Έλ“œμ˜ λŒ€μ†Œ κ΄€κ³„λŠ” μΌμ •ν•˜μ§€ μ•Šλ‹€. -> μ™Όμͺ½μ΄ 였λ₯Έμͺ½λ³΄λ‹€ 클 μˆ˜λ„ 있음.), 루트 λ…Έλ“œμ— μ΅œλŒ“κ°’μ„ κ°–λŠ” νž™μ„ 'μ΅œλŒ€ νž™(maximum heap)' 이라고 ν•œλ‹€. λ°˜λŒ€λ‘œ 각 λ…Έλ“œμ˜ 값이 μžμ‹ λ…Έλ“œμ˜ 값보닀 μž‘κ±°λ‚˜ κ°™μ•„μ•Όν•˜λŠ” μ™„μ „ 이진 트리λ₯Ό 'μ΅œμ†Œ νž™(minimum heap)'이라고 ν•œλ‹€. 이λ₯Ό μ΄μš©ν•˜μ—¬ μ˜€λ¦„μ°¨μˆœ λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•  수 μžˆλ‹€. πŸ“Œνž™ μ •λ ¬μ΄λž€?자료ꡬ쑰 νž™(Heap)의 μž₯점을 ν™œμš©ν•˜μ—¬ μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜. μ£Όμ–΄μ§„ 배열을 νž™μœΌλ‘œ λ§Œλ“  λ’€ κ°€μž₯ 큰 값인 루트λ₯Ό κΊΌλ‚΄κ³ , 루트 μ΄μ™Έμ˜ ..

[μ•Œκ³ λ¦¬μ¦˜] 퀡 μ •λ ¬(Quick Sort)

πŸ“Œν€΅ μ •λ ¬μ΄λž€?κ°€μž₯ λΉ λ₯Έ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜. λΆ„ν•  정볡 방법이 적용된 μ•Œκ³ λ¦¬μ¦˜. μ°°μŠ€ μ•€ν„°λ‹ˆ λ¦¬μ²˜λ“œ ν˜Έμ–΄(C. A. R. Hoare)κ°€ μ•Œκ³ λ¦¬μ¦˜μ˜ μ •λ ¬ 속도가 맀우 λΉ λ₯΄λ‹€κ³  ν•΄μ„œ 뢙인 이름이닀. λ°°μ—΄ λ‚΄μ˜ νŠΉμ • 데이터(pivot)λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•  데이터듀을 μ™Όμͺ½ λΆ€λΆ„ λ°°μ—΄κ³Ό 였λ₯Έμͺ½ λΆ€λΆ„ λ°°μ—΄λ‘œ λ‚˜λˆ„μ–΄ 각 λΆ€λΆ„ 배열에 λŒ€ν•΄ 퀡 정렬을 μˆœν™˜μœΌλ‘œ μ μš©ν•˜μ—¬ λ°°μ—΄ 전체λ₯Ό μ •λ ¬ν•œλ‹€.  πŸ“Œμ‹œκ°„ λ³΅μž‘λ„μ΅œμ•…: O(n^2) 이미 μ •λ ¬λ˜μ–΄ μžˆλŠ” 배열을 μ •λ ¬ν•  κ²½μš°μ΅œμ„ : O(n log n)평균: O(n log n)  πŸ“Œνλ¦„1. μž…λ ₯된 데이터 μˆ˜κ°€ n인 λ°°μ—΄ `arr`κ°€ μžˆμ„ λ•Œ `arr` λ‚΄ μž„μ˜μ˜ 데이터 ν”Όλ²—(pivot)을 μ •ν•œλ‹€. 일반적으둜 λ°°μ—΄μ˜ 첫번째 데이터(`arr[0]`)κ°€ λœλ‹€.2. 피벗을 κΈ°μ€€μœΌλ‘œ ..

[μ•Œκ³ λ¦¬μ¦˜] μ•Œκ³ λ¦¬μ¦˜μ΄λž€?

πŸ“Œμ•Œκ³ λ¦¬μ¦˜μ»΄ν“¨ν„° κ³Όν•™μ—μ„œ μ•Œκ³ λ¦¬μ¦˜μ΄λž€ 문제λ₯Ό ν‘ΈλŠ” μ ˆμ°¨μ™€ 과정을 μΌμ»«λŠ”λ‹€. μ£Όμ–΄μ§„ 문제λ₯Ό ν•΄κ²°ν•˜κ±°λ‚˜ ν•¨μˆ˜λ₯Ό κ³„μ‚°ν•˜κΈ° μœ„ν•΄ 따라야 ν•  λͺ…령어듀을 λ‹¨κ³„μ μœΌλ‘œ λ‚˜μ—΄ν•œ 것을 λœ»ν•œλ‹€. πŸ“Œμ‘°κ±΄1. μž…μΆœλ ₯: 0개 μ΄μƒμ˜ μ™ΈλΆ€ μž…λ ₯κ³Ό 1개 μ΄μƒμ˜ 좜λ ₯을 μƒμ„±ν•œλ‹€.2. λͺ…ν™•μ„±: 각 λͺ…령은 λͺ¨ν˜Έν•˜μ§€ μ•Šκ³  λͺ…ν™•ν•΄μ•Όν•œλ‹€.3. μœ ν•œμ„±: ν•œμ •λœ 수의 단계λ₯Ό 거친 ν›„μ—λŠ” λ°˜λ“œμ‹œ μ’…λ£Œν•΄μ•Όν•œλ‹€.4. μœ νš¨μ„±: λͺ¨λ“  λͺ…령은 μ»΄ν“¨ν„°μ—μ„œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.5. νš¨μœ¨μ„±: μ•Œκ³ λ¦¬μ¦˜μ€ νš¨μœ¨μ μ΄μ–΄μ•Ό ν•œλ‹€.(μ‹€μš©μ  관점) μ£Όμ–΄μ§„ λ¬Έμ œμ— λŒ€ν•œ ν•˜λ‚˜ μ΄μƒμ˜ κ²°κ³Όλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ λͺ¨ν˜Έν•˜μ§€ μ•Šκ³  λ‹¨μˆœ λͺ…ν™•ν•˜λ©° 컴퓨터가 μˆ˜ν–‰ν•  수 μžˆλŠ” μœ ν•œ 개의 일련의 λͺ…령어듀을 μˆœμ„œμ— 따라 κ΅¬μ„±ν•œ 것을 μ•Œκ³ λ¦¬μ¦˜μ΄λΌ ν•œλ‹€.  πŸ“Œ섀계주어진 λ¬Έμ œμ™€ 쑰건은 맀우 λ‹€μ–‘..

[λ””μžμΈ νŒ¨ν„΄] μƒνƒœ(State) νŒ¨ν„΄

μƒνƒœ νŒ¨ν„΄μ΄λž€ ν–‰μœ„ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, 객체가 νŠΉμ • μƒνƒœμ— 따라 λ™μž‘μ„ λ‹€λ₯΄κ²Œ ν•˜λŠ” μƒν™©μ—μ„œ 쑰건문으둜 λΆ„κΈ°ν•˜λŠ” λŒ€μ‹  μƒνƒœ 자체λ₯Ό κ°μ²΄ν™”ν•˜μ—¬ 행동 결정을 μœ„μž„ν•˜λŠ” νŒ¨ν„΄μ„ λ§ν•œλ‹€. μƒνƒœλž€ 객체가 κ°€μ§ˆ 수 μžˆλŠ” μ–΄λ–€ μ‘°κ±΄μ΄λ‚˜ 상황을 λ§ν•œλ‹€. 주둜 λ‹€μŒκ³Ό 같은 κ²½μš°μ— μ‚¬μš©ν•œλ‹€. 1. 객체의 행동이 μƒνƒœμ— 따라 λ‹¬λΌμ§ˆ λ•Œ 2. 객체의 μ½”λ“œκ°€ μƒνƒœ μ „ν™˜μ— λ”°λ₯Έ 쑰건문으둜 λ³΅μž‘ν•΄μ§ˆ λ•Œ μƒνƒœ ν΄λž˜μŠ€λŠ” μƒνƒœμ— 따라 행동을 κ΅¬ν˜„ν•˜κ³ , κ°μ²΄λŠ” κ·Έ μƒνƒœλ₯Ό κ°€μ§€λ©° μƒνƒœμ— 따라 μ μ ˆν•œ 행동을 μ·¨ν•œλ‹€. 예λ₯Ό λ“€μ–΄, μžνŒκΈ°λŠ” 돈이 μΆ©λΆ„νžˆ λ“€μ–΄μ˜€μ§€ μ•ŠμœΌλ©΄ λ²„νŠΌμ΄ ν™œμ„±ν™”λ˜μ§€ μ•ŠλŠ”λ‹€. μžνŒκΈ°λŠ” 돈이 λ“€μ–΄μ˜¨ μƒνƒœμ™€, 돈이 λ“€μ–΄μ˜€μ§€ μ•Šμ€ μƒνƒœμ— 따라 ν–‰μœ„κ°€ 달라진닀. // μƒνƒœ μΈν„°νŽ˜μ΄μŠ€ interface VendingMachineState..

[λ””μžμΈ νŒ¨ν„΄] λ°μ½”λ ˆμ΄ν„°(Decorator) νŒ¨ν„΄

λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄μ€ ꡬ쑰 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€κ°€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. // Component μΈν„°νŽ˜μ΄μŠ€ interface Component { String operation(); } // RealComponent 클래슀 class RealComponent implements Component { @Override public String operation() { return "String"; } } // Decorator μΈν„°νŽ˜μ΄μŠ€ interface Decorator extends Component { } // RealDecorator 클래슀 class RealDecorator implements Decorator { private Component component; public R..

[λ””μžμΈ νŒ¨ν„΄] ν”„λ‘μ‹œ(Proxy) νŒ¨ν„΄

ν”„λ‘μ‹œ(Proxy)λŠ” μ˜μ–΄λ‘œ λŒ€λ¦¬μžλ₯Ό λœ»ν•œλ‹€. ν”„λ‘μ‹œ νŒ¨ν„΄μ€ ꡬ쑰 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 직접 μ„œλ²„μ— μš”μ²­ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ–΄λ–€ λŒ€λ¦¬μž 객체λ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ μ„œλ²„μ— μš”μ²­ν•˜λŠ” νŒ¨ν„΄μ„ λ§ν•œλ‹€. μ—¬κΈ°μ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ˜λ’°μΈμ„ μ˜λ―Έν•˜λ©° μ„œλ²„λŠ” μ„œλΉ„μŠ€λ‚˜ μƒν’ˆμ„ μ œκ³΅ν•˜λŠ” μ‚¬λžŒ λ˜λŠ” 물건을 λœ»ν•œλ‹€. 즉 μ›Ήμ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚¬μš©μžκ°€ μ ‘μ†ν•œ μ›Ή λΈŒλΌμš°μ €κ°€ 되고, μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€. 1. 가상 ν”„λ‘μ‹œ(Virtual Proxy) - μ‹€μ œ 객체의 크기가 κ±°λŒ€ν•΄μ„œ 생성과 접근에 λΉ„μš©μ΄ 많이 λ“œλŠ” 경우 ν•„μš”ν•œ μ‹œμ μ—λ§Œ 객체λ₯Ό μƒμ„±ν•˜λ„λ‘ μ§€μ—°λœ μ΄ˆκΈ°ν™”λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€. 2. 보호 ν”„λ‘μ‹œ(Protection Proxy) - μ‹€μ œ 객체에 λŒ€ν•œ 접근을 ν†΅μ œν•˜μ—¬ νŠΉμ • κΆŒν•œμ„ κ°€μ§„ μ‚¬μš©μž(ν΄λΌμ΄μ–ΈνŠΈ)만이 μ ‘κ·Όν•˜λ„..

[λ””μžμΈ νŒ¨ν„΄] 싱글톀(Singleton) νŒ¨ν„΄

싱글톀 νŒ¨ν„΄μ€ 생성 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ νŠΉμ • μΈμŠ€ν„΄μŠ€κ°€ 단 ν•˜λ‚˜μž„μ„ 보μž₯ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€. λͺ¨λ“  객체가 단 ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•œλ‹€. public class Singleton { private static Singleton instance; // Private constructor to prevent direct instantiation private Singleton() { // Initialization if needed } // Static method to provide access to the instance public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return..

[λ””μžμΈ νŒ¨ν„΄] νŒ©ν† λ¦¬ λ©”μ„œλ“œ(Factory Method) νŒ¨ν„΄

νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄μ€ 생성 νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ 객체 생성을 곡μž₯ ν΄λž˜μŠ€μ—κ²Œ μœ„μž„ν•˜λŠ” νŒ¨ν„΄μ„ λ§ν•œλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ ꡬ체 클래슀λ₯Ό 직접 μ–ΈκΈ‰ν•˜μ—¬ `new` μ—°μ‚°μžλ₯Ό ν˜ΈμΆœν•˜λŠ” λŒ€μ‹ , λ§Œλ“€κ³ μž ν•˜λŠ” 객체의 생성 μ±…μž„μ„ 맑은 곡μž₯ ν΄λž˜μŠ€μ—κ²Œ 객체 생성을 λ§‘κΈ΄λ‹€. 이름 κ·ΈλŒ€λ‘œ 객체λ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” 곡μž₯(Factory)λ₯Ό λ§Œλ“œλŠ” νŒ¨ν„΄μ΄λΌκ³  ν•  수 μžˆλ‹€. 곡μž₯ ν΄λž˜μŠ€μ—μ„œ 객체λ₯Ό λ§Œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λ©°, (μ—¬κΈ°μ„œ μΈν„°νŽ˜μ΄μŠ€λž€ 객체 생성을 ν•˜λŠ” λ©”μ„œλ“œλ₯Ό λœ»ν•œλ‹€. `ShapeFactory`μ—μ„œλŠ” `createShape()` λ©”μ„œλ“œκ°€ μΈν„°νŽ˜μ΄μŠ€λΌκ³  ν•  수 μžˆλ‹€.) ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€, 즉 곡μž₯ 클래슀λ₯Ό 상속 λ°›λŠ” 곡μž₯ μ„œλΈŒ ν΄λž˜μŠ€κ°€ λ§Œλ“€ 객체의 μœ ν˜•μ„ κ²°μ •ν•œλ‹€. 곡μž₯ μΈν„°νŽ˜μ΄μŠ€: 객체 생성 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 인터..

[JAVA] μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬(Collection framework)

μ–Έμ–΄: java | Collection List와 Set의 쑰상. μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ— μ €μž₯된 ν…Œμ΄ν„°λ₯Ό 읽고, μΆ”κ°€ν•˜κ³ , μ‚­μ œν•˜λŠ” λ©”μ„œλ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€. List Set Map은 λͺ¨λ‘ μΈν„°νŽ˜μ΄μŠ€μ΄λ©° List와 Set은 곡톡점이 λ§Žμ•„ Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•  수 μžˆμ—ˆμœΌλ‚˜ Map은 μ „ν˜€ λ‹€λ₯Έ ν˜•νƒœλ‘œ 닀루기 λ•Œλ¬Έμ— 같은 λΆ€λͺ¨μ— ν¬ν•¨λ˜μ§€ μ•Šμ•˜λ‹€. | List μˆœμ„œ O, 쀑볡 O μˆœμ„œκ°€ μ‘΄μž¬ν•˜λ©° 쀑볡도 ν—ˆμš©ν•¨. ex) λŒ€κΈ°μž λͺ…단: μˆœμ„œκ°€ μ‘΄μž¬ν•˜μ§€λ§Œ 같은 이름이 μ‘΄μž¬ν•  수 있음. μ»¬λ ‰μ…˜ν”„λ ˆμž„μ›Œν¬μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜ 클래슀. (μžλ°”3판 p.584) κ΅¬ν˜„ν΄λž˜μŠ€: ArrayList, LinkedList, Stack, Vectorλ“± ArrayList (λ°°μ—΄κΈ°λ°˜) κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ»¬λ ‰μ…˜ 클래슀. μ €..