algorithm
4 posts
크루슀칼 μ•Œκ³ λ¦¬μ¦˜

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό 풀닀보면 마주치게 λ˜λŠ” 크루슀칼 μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ΄€λ‹€. What is Kruskal’s algorithm? μ΅œμ†Œ λΉ„μš© μ‹ μž₯ λΆ€λΆ„ 트리λ₯Ό μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜ λ³€μ˜ 개수λ₯Ό E, κΌ­μ§“μ μ˜ 개수λ₯Ό V라고 ν•˜λ©΄ 이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(ElogV) λ…Έλ“œμ™€ κ°„μ„ μœΌλ‘œ 이루어진 κ·Έλž˜ν”„κ°€ μžˆμ„ λ•Œ, κ°€μž₯ 적은 λΉ„μš©μœΌλ‘œ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” 방법을 μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 주둜 κ°„μ„ λ§ˆλ‹€ κ°€μ€‘μΉ˜κ°€ μžˆμ„ λ•Œ κ°€μž₯ 적은 λΉ„μš©μœΌλ‘œ μ—°κ²°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. How it works μœ„ν‚€λ°±κ³Όμ˜ 크루슀칼 μ•Œκ³ λ¦¬μ¦˜ 예제λ₯Ό 톡해 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μž. κ°„μ„  μ˜†μ— μžˆλŠ” μˆ«μžλŠ” λ³€μ˜ κ°€μ€‘μΉ˜λ₯Ό 가리킨닀. μ§€κΈˆμ€ λͺ¨λ“  κ°„μ„ μ˜ 색이 검정색이닀. μ•žμœΌλ‘œ μ—°κ²°λœ 선은 λ…Ήμƒ‰μœΌλ‘œ, μ—°κ²°ν•  수 μ—†λŠ” 선은 λΉ¨κ°•μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€. κ°€μ€‘μΉ˜κ°€ κ°€μž₯ μž‘μ€ 간선을 κ³ λ₯Έλ‹€. μ§€κΈˆμ²˜λŸΌ κ°€μ€‘μΉ˜κ°€ κ°€μž₯ μž‘μ€ 선이 λ‘κ°œμ„ 경우 μ•„λ¬΄κ±°λ‚˜ 골라 μ„ νƒν•˜λ©΄ λœλ‹€. AD 와 CE 쀑 ADλ₯Ό μ„ νƒν•˜κ³ , ADλŠ” μ—°κ²°λœ 선이기 λ•Œλ¬Έμ— λ…Ήμƒ‰μœΌλ‘œ λ³€κ²½ν•œβ€¦

March 23, 2022
algorithm
κΉŠμ΄μš°μ„ νƒμƒ‰(DFS)κ³Ό λ„ˆλΉ„μš°μ„ νƒμƒ‰(BFS)

κ·Έλž˜ν”„μ˜ λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? κ°€μž₯ λŒ€ν‘œμ μΈ 탐색방법인 DFS와 BFS에 λŒ€ν•΄ μ•Œμ•„λ³΄μž. Depth First Search (DFS) ν•œ 길을 깊게 νŒŒμ„œ 탐색 μžμ‹ κ³Ό μ—°κ²°λœ λ…Έλ“œ 쀑 ν•œ λ…Έλ“œλ₯Ό 탐색 탐색 κ³Όμ • λ‹€μŒκ³Ό 같은 κ·Έλž˜ν”„κ°€ μžˆλ‹€. 1. μ‹œμž‘ λ…Έλ“œμ—μ„œ 갈 수 μžˆλŠ” λ…Έλ“œ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•˜μ—¬ νƒμƒ‰ν•œλ‹€. κ·Έλž˜ν”„μ—μ„œ 0 을 μ‹œμž‘ λ…Έλ“œλ‘œ μ •ν•˜κ³ , 갈 수 μžˆλŠ” λ…Έλ“œ 쀑 1 을 μ„ νƒν–ˆλ‹€. 2. β‘  κ³Ό 같은 λ°©λ²•μœΌλ‘œ 탐색을 λ°˜λ³΅ν•œλ‹€. (이미 λ°©λ¬Έν•œ λ…Έλ“œλŠ” μ„ νƒμ§€μ—μ„œ μ œμ™Έ) 1번 λ…Έλ“œμ—μ„œ 갈 수 μžˆλŠ” 선택지 0 κ³Ό 2 쀑, 0은 이미 λ°©λ¬Έν–ˆμœΌλ―€λ‘œ 2λ₯Ό μ„ νƒν•œλ‹€. 2번 λ…Έλ“œμ—μ„œ 갈 수 μžˆλŠ” 선택지 0 κ³Ό 3 쀑, 0은 이미 λ°©λ¬Έν–ˆμœΌλ―€λ‘œ 3λ₯Ό μ„ νƒν•œλ‹€. 3. λ‹€μŒμœΌλ‘œ 탐색해야 ν•  λ…Έλ“œκ°€ μ—†λ‹€λ©΄ ν•΄λ‹Ή λ…Έλ“œλ₯Ό ν˜ΈμΆœν•œ λΆ€λͺ¨ λ…Έλ“œλ‘œ λŒμ•„κ°€ 더 탐색해야 ν•  λ…Έλ“œκ°€ μžˆλŠ”μ§€ μ°ΎλŠ”λ‹€. 3번 λ…Έλ“œμ—μ„œ 더 이상 갈 수 μžˆλŠ” 선택지가 μ—†μœΌλ―€λ‘œ, 2번 λ…Έλ“œλ‘œ λŒμ•„κ°„λ‹€. 2번 λ…Έλ“œμ—μ„œλŠ”β€¦

February 04, 2022
algorithm
μ΄μ§„νŠΈλ¦¬

트리(Tree)λž€? 계측적인 ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λ©°, λΆ€λͺ¨-μžμ‹ κ΄€κ³„μ˜ λ…Έλ“œλ“€λ‘œ 이루어짐 리슀트, μŠ€νƒ, 큐와 같은 μ„ ν˜• μžλ£Œκ΅¬μ‘°κ°€ μ•„λ‹Œ λΉ„μ„ ν˜• 자료ꡬ쑰 컴퓨터 λ””μŠ€ν¬μ˜ 디렉터리 ꡬ쑰도 νŠΈλ¦¬μ— ν•΄λ‹Ήν•œλ‹€. 트리 μš©μ–΄ node: 트리의 κ΅¬μ„±μš”μ†Œ root: λΆ€λͺ¨κ°€ μ—†λŠ” λ…Έλ“œ subtree: ν•˜λ‚˜μ˜ λ…Έλ“œμ™€ κ·Έ λ…Έλ“œμ˜ μžμ†λ“€λ‘œ 이루어진 트리 terminal node(λ‹¨λ§λ…Έλ“œ): μžμ‹μ΄ μ—†λŠ” λ…Έλ“œ non-terminal node(λΉ„λ‹¨λ§λ…Έλ“œ): 적어도 ν•˜λ‚˜μ˜ μžμ‹μ„ κ°€μ§€λŠ” λ…Έλ“œ level: 트리의 각 측의 번호 트리의 height(높이): 트리의 μ΅œλŒ€ 레벨 λ…Έλ“œμ˜ degree(차수): λ…Έλ“œκ°€ 가지고 μžˆλŠ” μžμ‹ λ…Έλ“œμ˜ 개수 edge(κ°„μ„ ): λ…Έλ“œμ™€ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” μ„  트리의 degree(차수): νŠΈλ¦¬κ°€ 가지고 μžˆλŠ” λ…Έλ“œμ˜ 차수 μ€‘μ—μ„œ κ°€μž₯ 큰 차수 forest: νŠΈλ¦¬λ“€μ˜ 집합 μ΄μ§„νŠΈλ¦¬(Binary tree)λž€? μžμ‹ λ…Έλ“œμ˜ κ°œμˆ˜κ°€ μ΅œλŒ€ 2개인 트리 자료ꡬ쑰 μ„œλΈŒνŠΈλ¦¬ 간에 μˆœμ„œκ°€ μ‘΄μž¬ν•˜μ—¬ μ™Όμͺ½κ³Ό 였λ₯Έμͺ½ …

December 13, 2021
algorithm
μ†Œμˆ˜(Prime Number) κ΅¬ν•˜κΈ°

νŠΉμ • μˆ˜κ°€ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•΄λ‚΄λŠ” ν•¨μˆ˜λ₯Ό JavaScript둜 κ΅¬ν˜„ν•˜κ³ μž ν•©λ‹ˆλ‹€. λ¨Όμ € μ†Œμˆ˜κ°€ 무엇인지 μ•Œμ•„λ΄…μ‹œλ‹€. μ†Œμˆ˜(Prime Number)λž€? 1보닀 큰 μžμ—°μˆ˜ 쀑 1κ³Ό 자기 μžμ‹ λ§Œμ„ μ•½μˆ˜λ‘œ κ°€μ§€λŠ” 수 μœ„λ₯Ό 톡해 μ†Œμˆ˜μ˜ 기쀀을 λ‹€μŒκ³Ό 같이 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 1보닀 큰 μžμ—°μˆ˜ 1κ³Ό 자기 μžμ‹ λ§Œμ΄ μ•½μˆ˜ κ°„λ‹¨ν•˜κ²Œ μ†Œμˆ˜νŒλ³„ν•¨μˆ˜ κ΅¬ν˜„ν•˜κΈ° μ†Œμˆ˜ 은 κ³Ό μžκΈ°μžμ‹ λ§Œμ„ μ•½μˆ˜λ‘œ κ°€μ§€λ―€λ‘œ, κΉŒμ§€μ˜ 수둜 λ‚˜λˆ΄μ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 이 μ•„λ‹™λ‹ˆλ‹€. 이λ₯Ό μ΄μš©ν•΄ κ°„λ‹¨ν•œ μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 숫자 을 λΆ€ν„° κΉŒμ§€ λ‚˜λˆ΄μ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 인지 μ²΄ν¬ν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” μž…λ‹ˆλ‹€. 더 효율적인 μ†Œμˆ˜νŒλ³„ν•¨μˆ˜ κ΅¬ν˜„ν•˜κΈ° μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜λ₯Ό 더 λΉ λ₯΄κ²Œ 돌릴 수 μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€. 보닀 더 큰 μˆ˜λŠ” ν•©μ„±μˆ˜μ΄κ±°λ‚˜ μ†Œμˆ˜μΌ 수 밖에 μ—†μŠ΅λ‹ˆλ‹€. 직접 해보면 μ΄ν•΄λ©λ‹ˆλ‹€. 참고둜 ν•©μ„±μˆ˜λŠ” 1보닀 큰 μžμ—°μˆ˜ 쀑 μ†Œμˆ˜κ°€ μ•„λ‹Œ 수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ”°λΌμ„œ 숫자 을 λΆ€ν„° κΉŒμ§€ λ‚˜λˆ΄μ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 인지 μ²΄ν¬ν•©λ‹ˆλ‹€. 이 ν•¨μˆ˜μ˜ μ‹œβ€¦

September 13, 2021
algorithm
javascript