관리 메뉴

λͺ©λ‘μ „체 κΈ€ (352)

DATA101

[μ•Œκ³ λ¦¬μ¦˜] λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°(DP)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž! (+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” λ‹€μ΄λ‚˜λ―Ή(동적) ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ΄λž€? 2. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° 예제 3. μž¬κ·€ν•¨μˆ˜ 기반 κ΅¬ν˜„ 3.1. μ†ŒμŠ€μ½”λ“œ 3.2. 문제점 3.2.1. μ—°μ‚° λ³΅μž‘μ„± 3.2.2. 문제 λ°œμƒμ˜ 원인 3.2.3. 문제 ν•΄κ²° λ°©μ•ˆ 4. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° 기반 κ΅¬ν˜„ 4.1. 탑 λ‹€μš΄ 방식(μž¬κ·€ν•¨μˆ˜ ν™œμš©) 4.1.1. λ©”λͺ¨μ΄μ œμ΄μ…˜μ΄λž€? 4.1.2. μ†ŒμŠ€μ½”λ“œ 4.1.3. νŠΉμ§• 4.2. λ°”ν…€ μ—… 방식(반볡문 ν™œμš©) 4.2.1. μ†ŒμŠ€μ½”λ“œ 4.2.2. νŠΉμ§• 1. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ΄λž€? λ‹€μ΄λ‚˜λ―Ή(동적) ν”„λ‘œκ·Έλž˜λ°μ€ 큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆ„μ–΄ μ—°μ‚° 속도와 λ©”λͺ¨λ¦¬λ₯Ό μ΅œλŒ€ν•œμœΌλ‘œ ν™œμš©ν•˜κΈ° μœ„ν•œ κΈ°λ²•μž…λ‹ˆλ‹€. νŠΉμ • 값을 μ–»κΈ° μœ„ν•΄ 맀번 같은 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 연산을 ꡳ이 λ°˜λ³΅ν•΄..

[μ•Œκ³ λ¦¬μ¦˜] 이진 탐색(Binary Search)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž!(+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” 이진 탐색(Binary Search) μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. 이진 νƒμƒ‰μ΄λž€? 2. 이진 νƒμƒ‰μ˜ λ™μž‘ κ³Όμ • 3. 이진 νƒμƒ‰μ˜ μ‹œκ°„ λ³΅μž‘λ„ 4. 이진 탐색 κ΅¬ν˜„(Python) 1. 이진 νƒμƒ‰μ΄λž€? 이진 탐색은 νƒμƒ‰μ˜ λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ’ν˜€κ°€λ©° 데이터λ₯Ό νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이진탐색 μ•Œκ³ λ¦¬μ¦˜μ€ 리슀트 λ‚΄ 데이터가 μ–΄λŠ 정도 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Όλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° 데이터가 λ¬΄μž‘μœ„λ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€λ©΄ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이진 탐색 μ•Œκ³ λ¦¬μ¦˜μ€ μž…λ ₯ 데이터가 λ§Žκ±°λ‚˜(e.g., 1,000만 개 이상) 탐색 λ²”μœ„μ˜ 크기가 맀우 넓을 λ•Œ(e.g., 1,000μ–΅ 이상) 효과적으둜 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 2. 이진 νƒμƒ‰μ˜ λ™μž‘ κ³Όμ • 이진 νƒμƒ‰μ˜ λ™μž‘ 과정에 λŒ€ν•΄ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 순차 탐색(..

[μ•Œκ³ λ¦¬μ¦˜] 순차 탐색(Sequential Search)에 λŒ€ν•΄ μ•Œμ•„λ³΄μž!(+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” 순차 탐색(Sequential Search)에 λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. 순차 탐색(μ΄λž€? 2. λ™μž‘ κ³Όμ • 3. κ΅¬ν˜„(Python) 4. μ‹œκ°„ λ³΅μž‘λ„ 1. 순차 νƒμƒ‰μ΄λž€? 순차 탐색(Sequential Search)은 말 κ·ΈλŒ€λ‘œ 리슀트 λ‚΄ νŠΉμ • 데이터λ₯Ό μ°ΎκΈ° μœ„ν•΄ μ•žμ—μ„œλΆ€ν„° 데이터λ₯Ό μ°¨λ‘€λŒ€λ‘œ νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 2. λ™μž‘ κ³Όμ • 순차 νƒμƒ‰μ˜ 과정은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. ν’€μ–΄μ¨μ„œ λ³΅μž‘ν•΄ λ³΄μ΄μ§€λ§Œ 맨 μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ λΉ„κ΅ν•˜λŠ” λ‹¨μˆœν•œ λ°©λ²•μž…λ‹ˆλ‹€. 1️⃣ 맨 μ•ž 데이터와 μ°ΎμœΌλ €λŠ” 데이터가 같은지 νƒμƒ‰ν•©λ‹ˆλ‹€. 2️⃣ 데이터가 μ„œλ‘œ 같지 μ•Šλ‹€λ©΄ λ‹€μŒ 데이터와 μ°ΎμœΌλ €λŠ” 데이터가 같은지 νƒμƒ‰ν•©λ‹ˆλ‹€. 3️⃣ 같은 데이터λ₯Ό μ°ΎκΈ° μ „κΉŒμ§€ 2️⃣ 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€. 리슀트 λ‚΄ 데이터가 아무리 λ§Žμ•„λ„ ..

[μ•Œκ³ λ¦¬μ¦˜] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 문제 풀이 μ „λž΅!

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 문제 풀이 μ „λž΅μ„ κ³΅μœ ν•©λ‹ˆλ‹€. μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 문제 ν•΄κ²° μ „λž΅ μ•Œκ³ λ¦¬μ¦˜ 문제 풀이에 μžˆμ–΄μ„œ νŠΉλ³„νžˆ λ¬Έμ œμ—μ„œ μš”κ΅¬μ‚¬ν•­μ΄ 없을 경우, λ‹¨μˆœνžˆ 정렬이 ν•„μš”ν•œ μƒν™©μ—μ„œλŠ” κΈ°λ³Έ λ‚΄μž₯ μ •λ ¬ 라이브러리λ₯Ό ν™œμš©ν•˜μ‹œλŠ” 것이 κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, λ°μ΄ν„°μ˜ λ²”μœ„κ°€ ν•œμ •λ˜μ–΄ 있고 λ”μš± λΉ λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ 문제λ₯Ό ν’€μ–΄μ•Ό ν•œλ‹€λ©΄ κ³„μˆ˜ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ ν™œμš©ν•˜μ‹œλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 이처럼 μ•„λž˜μ— 주어진 상황에 λ§žλŠ” μ•Œκ³ λ¦¬μ¦˜ 문제 풀이 μ „λž΅μ„ 정리해 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. (1) μ •λ ¬ 라이브러리 ν™œμš© 문제 λ‹¨μˆœνžˆ λ‚΄μž₯ μ •λ ¬ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄ μ•Œκ³  있고 μ‚¬μš©ν•  쀄 μ•„λŠ”μ§€ 묻기 μœ„ν•œ 문제 μœ ν˜•μž…λ‹ˆλ‹€. 기본적으둜 λ‚΄μž₯ μ •λ ¬ ν•¨μˆ˜ μ‚¬μš©λ°©λ²•μ— λŒ€ν•΄ 기본적인 뢀뢄듀에 λŒ€ν•΄ μˆ™μ§€ν•˜κ³  있으면 어렡지 μ•Šκ²Œ 문제λ₯Ό ν’€ 수 μžˆμŠ΅λ‹ˆλ‹€. (..

[파이썬] λ‚΄μž₯ ν•¨μˆ˜λ₯Ό ν™œμš©ν•œ 데이터 μ •λ ¬ν•˜κΈ°! (sorted, sort ν•¨μˆ˜)

μ˜€λŠ˜μ€ 파이썬 λ‚΄μž₯ ν•¨μˆ˜μΈ sorted()와 sort()λ₯Ό ν™œμš©ν•œ 데이터 μ •λ ¬ 방법에 λŒ€ν•΄ κ³΅μœ ν•΄ λ“œλ¦½λ‹ˆλ‹€. 그럼 λ°”λ‘œ μ‹œμž‘ν•˜μ£ ! λͺ©μ°¨ 1. κΈ°λ³Έ μ •λ ¬ 라이브러리 2. sorted ν•¨μˆ˜ 3. sort ν•¨μˆ˜ 4. key λ§€κ°œλ³€μˆ˜λ₯Ό ν™œμš©ν•œ μ •λ ¬ κΈ°μ€€ μ„€μ • 5. μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 문제 ν•΄κ²° μ „λž΅ 1. κΈ°λ³Έ μ •λ ¬ 라이브러리 νŒŒμ΄μ¬μ—λŠ” sorted 및 sortλΌλŠ” μ •λ ¬ ν•¨μˆ˜κ°€ 기본적으둜 λ‚΄μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 ν•¨μˆ˜λ“€μ€ 리슀트, λ”•μ…”λ„ˆλ¦¬, 집합 λ“±μ˜ 데이터 νƒ€μž…μ„ μž…λ ₯κ°’μœΌλ‘œ λ°›κ³ , 데이터 νƒ€μž…μ— 상관없이 항상 리슀트 ν˜•νƒœλ‘œ 데이터λ₯Ό μ •λ ¬ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€. λ˜ν•œ, 이 ν•¨μˆ˜λ“€μ€ μ΅œμ•…μ˜ κ²½μš°μ—λ„ O(N*log N) 의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 보μž₯ν•œλ‹€λŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€. 그럼 sorted ν•¨μˆ˜μ™€ sort ν•¨μˆ˜ 각각에..

SW 개발/Python 2021. 3. 15. 10:45
[μ•Œκ³ λ¦¬μ¦˜] κ³„μˆ˜ 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄μž! (+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” κ³„μˆ˜ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. κ³„μˆ˜ μ •λ ¬μ΄λž€? 2. κ³„μˆ˜ μ •λ ¬μ˜ λ™μž‘ κ³Όμ • 3. κ³„μˆ˜ μ •λ ¬μ˜ κ΅¬ν˜„(Python) 4. κ³„μˆ˜ μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„ 1. κ³„μˆ˜ μ •λ ¬μ΄λž€? κ³„μˆ˜ 정렬은 데이터 κ°œμˆ˜κ°€ λ§Žλ”λΌλ„ 맀우 λΉ λ₯΄κ²Œ λ™μž‘ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜λ‘œμ„œ λ¦¬μŠ€νŠΈκ°€ λͺ¨λ‘ μ •μˆ˜ ν˜•νƒœλ‘œ ν‘œν˜„λ˜μ–΄ 있고 κ°€μž₯ μž‘μ€ 데이터와 κ°€μž₯ 큰 λ°μ΄ν„°μ˜ 차이가 1백만(1,000,000) μ΄ν•˜μΌ λ•Œ 효과적으둜 λ™μž‘ν•©λ‹ˆλ‹€. 이처럼 νŠΉμ • 쑰건이 λΆ€ν•©ν•  λ•Œλ§Œ λ™μž‘ν•˜λŠ” μ΄μœ λŠ” κ³„μˆ˜ 정렬을 ν™œμš©ν•  λ•ŒλŠ” κ°€μž₯ μž‘μ€ 데이터뢀터 κ°€μž₯ 큰 λ°μ΄ν„°κΉŒμ§€ λͺ¨λ“  λ²”μœ„μ˜ 데이터λ₯Ό 담을 수 μžˆλŠ” 크기의 리슀트λ₯Ό μ„ μ–Έν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κ°€μž₯ μž‘μ€ 데이터와 κ°€μž₯ 큰 λ°μ΄ν„°μ˜ 차이가 1,000,000이라면 총 ..

[μ•Œκ³ λ¦¬μ¦˜] 퀡 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄μž! (+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” 퀡 μ •λ ¬(Quick sort) μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œλ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. 퀡 μ •λ ¬μ΄λž€? 2. 퀡 μ •λ ¬μ˜ λ™μž‘ κ³Όμ • 3. 퀡 μ •λ ¬ κ΅¬ν˜„(Python) 4. 퀡 μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„ 1. 퀡 μ •λ ¬μ΄λž€? 퀡 정렬은 ν”Όλ²—(pivot)μ΄λΌλŠ” κΈ°μ€€ 데이터λ₯Ό μ„€μ •ν•˜κ³  κ·Έ κΈ°μ€€ 데이터보닀 큰 데이터와 μž‘μ€ λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό λ³€κ²½ν•˜λŠ” μ •λ ¬ λ°©μ‹μž…λ‹ˆλ‹€. 퀡 정렬은 데이터 κ°„μ˜ λΉ„κ΅λ§ŒμœΌλ‘œ 정렬을 μˆ˜ν–‰ν•˜λŠ” 비ꡐ μ •λ ¬ 쀑 ν•˜λ‚˜λ‘œμ„œ μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ 정렬이 λΉ λ₯΄λ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. 퀡 μ •λ ¬μ˜ 방식은 피벗을 μ„€μ •ν•˜κ³  데이터λ₯Ό λΆ„ν• ν•˜λŠ” 방법에 따라 μ—¬λŸ¬ κ°€μ§€λ‘œ ꡬ뢄할 수 μžˆμ§€λ§Œ, 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” κ°€μž₯ λŒ€ν‘œμ μΈ λΆ„ν•  방식인 ν˜Έμ–΄ λΆ„ν• (Hoare Partition)을 κΈ°μ€€μœΌλ‘œ μ„€λͺ…λ“œλ¦¬λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 2. 퀡 μ •λ ¬μ˜..

[μ•Œκ³ λ¦¬μ¦˜] μ‚½μž… 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄μž! (+Python κ΅¬ν˜„)

λ³Έ ν¬μŠ€νŒ…μ—μ„œλŠ” μ‚½μž… μ •λ ¬(Insertion sort) μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. πŸ“š λͺ©μ°¨ 1. μ‚½μž… μ •λ ¬μ΄λž€? 2. μ‚½μž… μ •λ ¬μ˜ λ™μž‘ κ³Όμ • 3. μ‚½μž… μ •λ ¬ κ΅¬ν˜„(Python) 4. μ‚½μž… μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„ 1. μ‚½μž… μ •λ ¬μ΄λž€? μ‚½μž… 정렬은 정렬이 ν•„μš”ν•œ 데이터λ₯Ό μ°Ύκ³  μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜λ©° μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. μ‚½μž… 정렬은 ν•„μš”ν•  λ•Œλ§Œ 데이터λ₯Ό λΉ„κ΅ν•˜κ³  μ‚½μž…ν•˜κΈ° λ•Œλ¬Έμ— 데이터가 μ–΄λŠ 정도 μ •λ ¬λ˜μ–΄ μžˆμ„ λ•Œ λ”μš± 효율적으둜 λ™μž‘ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ νŠΉμ§• 덕뢄에 μ •λ ¬ μƒνƒœμ™€ 상관없이 λͺ¨λ“  데이터λ₯Ό 일일이 λΉ„κ΅ν•˜λ©° μ •λ ¬ν•˜λŠ” 방식인 선택 정렬보닀 일반적으둜 νš¨μœ¨μ μž…λ‹ˆλ‹€. [μ•Œκ³ λ¦¬μ¦˜] 선택 정렬에 λŒ€ν•΄ μ•Œμ•„λ³΄μž! (+Python κ΅¬ν˜„) μ˜€λŠ˜μ€ 선택 μ •λ ¬(selection sort) μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜..