[Swift] μš°μ„ μˆœμœ„ 큐(Priority Queue) κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/자료ꡬ쑰
이 글은 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±λœ κΈ€μž„μ„ λ°νž™λ‹ˆλ‹€. 이 κΈ€μ˜ λͺ¨λ“  μΆœμ²˜λŠ” https://jeonyeohun.tistory.com/327 이곳에 μžˆμŠ΅λ‹ˆλ‹€. μš°μ„ μˆœμœ„ 큐(Priority Queue) νž™μ„ μ΄μš©ν•΄μ„œ κ°€μž₯ 높은 μš°μ„ μˆœμœ„μ— μžˆλŠ” μš”μ†Œλ₯Ό 항상 제일 μ²˜μŒμ— μœ„μΉ˜μ‹œν‚€λŠ” νŠΉλ³„ν•œ 큐 κ°€μž₯ μš°μ„ μˆœμœ„κ°€ 높은 μš”μ†Œκ°€ νμ—μ„œ 제거되면 κ·Έ λ‹€μŒ μš°μ„ μˆœμœ„μ— μžˆλŠ” μš”μ†Œκ°€ 큐의 첫 μš”μ†Œλ‘œ μ΄λ™ν•©λ‹ˆλ‹€. νž™μ— λŒ€ν•œ μ„€λͺ…은 https://jerry311.tistory.com/55 에 μžˆμŠ΅λ‹ˆλ‹€. μš°μ„ μˆœμœ„ μ„€μ • μš°μ„ μˆœμœ„ 큐λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–€ κΈ°μ€€μœΌλ‘œ μš°μ„ μˆœμœ„λ₯Ό 정할지 지정해주어야 ν•©λ‹ˆλ‹€. 지정 init(_ elements: [T] = [], _ sort: @escaping (T, T) -> Bool) { heap = Heap..
[Swift] νž™(Heap) κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/자료ꡬ쑰
이글은 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±λœ κΈ€μž„μ„ λ°νž™λ‹ˆλ‹€. μ΄κΈ€μ˜ λͺ¨λ“  λ‚΄μš©μ— λŒ€ν•œ μΆœμ²˜λŠ” https://jeonyeohun.tistory.com/325 μ΄κ³³μž…λ‹ˆλ‹€. νž™ μ΄μ§„νŠΈλ¦¬λ₯Ό μ‚¬μš©ν•΄μ„œ λ°˜μ •λ ¬ μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” 자료ꡬ쑰 νž™μ€ 트리의 루트 λ…Έλ“œμ— λ°μ΄ν„°λ“€μ˜ μ΅œμ†Ÿκ°’ ν˜Ήμ€ μ΅œλŒ€κ°’μ„ μ €μž₯ν•©λ‹ˆλ‹€. μ΅œμ†Ÿκ°’μ„ λ£¨νŠΈμ— λ‘˜ λ•ŒλŠ” μ΅œμ†Œνž™, μ΅œλŒ€κ°’μ„ λ£¨νŠΈμ— 두면 μ΅œλŒ€νž™μ΄λΌκ³  ν•©λ‹ˆλ‹€. μ™„μ „ μ΄μ§„νŠΈλ¦¬ 트리λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  λ…Έλ“œκ°€ μ΅œλŒ€ 2개의 μžμ‹λ…Έλ“œλ₯Ό κ°€μ§€λŠ” 자료ꡬ쑰 μ™„μ „ μ΄μ§„νŠΈλ¦¬λŠ” μ•„λž˜μ™€ 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€. 1. 각 높이에 μžˆλŠ” λͺ¨λ“  λ…Έλ“œκ°€ μžμ‹λ…Έλ“œλ₯Ό κ°€μ Έμ•Ό λ‹€μŒ 높이에 μƒˆ λ…Έλ“œλ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 2. κ°€μž₯ μ™Όμͺ½λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ λ…Έλ“œλ₯Ό μ±„μ›Œμ•Ό ν•©λ‹ˆλ‹€. 이 λ°°μ—΄ 기반의 μ΄μ§„νŠΈλ¦¬λ₯Ό μ΄μš©ν•΄μ„œ νž™μ„ κ΅¬ν˜„ν•˜κ² μŠ΅λ‹ˆλ‹€. νž™μ˜ μ΄μ§„νŠΈλ¦¬λŠ”..
SOLID 5원칙
Β·
πŸ’» CS
πŸ–πŸ» SOLID 5원칙 1️⃣ SRP (λ‹¨μΌμ±…μž„μ˜ 원칙) ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€. μ •μ˜ μž‘μ„±λœ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ κΈ°λŠ₯만 κ°€μ Έμ•Ό ν•œλ‹€. ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜λŠ” λͺ¨λ“  μ„œλΉ„μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ§‘μ€‘λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. μ–΄λ–€ 변화에 μ˜ν•΄ 클래슀λ₯Ό λ³€κ²½ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” 였직 ν•˜λ‚˜λΏμ΄μ–΄μ•Ό ν•œλ‹€. SRP 원리λ₯Ό μ μš©ν•˜λ©΄ 무엇보닀도 μ±…μž„ μ˜μ—­μ΄ 확싀해지기 λ•Œλ¬Έμ— ν•œ μ±…μž„μ˜ λ³€κ²½μ—μ„œ λ‹€λ₯Έ μ±…μž„μ˜ λ³€κ²½μœΌλ‘œμ˜ 연쇄 μž‘μš©μ—μ„œ μžμœ λ‘œμ›Œμ§ˆ 수 μžˆλ‹€. μ μš©λ°©λ²• μ—¬λŸ¬ 원인듀 속에 혼재된 각 μ±…μž„μ„ κ°œλ³„ 클래슀둜 λΆ„ν• ν•˜μ—¬ 클래슀 λ‹Ή ν•˜λ‚˜μ˜ μ±…μž„λ§Œμ„ 맑도둝 ν•œλ‹€. μ—¬κΈ°μ„œ 관건은 μ±…μž„λ§Œ λΆ„λ¦¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λΆ„λ¦¬λœ 두 ν΄λž˜μŠ€κ°„μ˜ κ΄€κ³„μ˜ λ³΅μž‘λ„λ₯Ό 쀄이도둝 μ„€κ³„ν•˜λŠ” 것이닀. λ§Œμ•½ 각각의 ν΄λž˜μŠ€λ“€μ΄ μœ μ‚¬ν•˜κ³  λΉ„μŠ·ν•œ μ±…μž„μ„ 쀑..
[Swift] 그리디(Greedy) μ•Œκ³ λ¦¬μ¦˜
Β·
πŸ’» CS/μ•Œκ³ λ¦¬μ¦˜
이 글은 λΉ„μ „κ³΅μž 취쀀생이 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ„ μ›ν•˜μ‹€ 경우 https://yurimac.tistory.com/30, https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%9A%95%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-greedy-algorithm/ 이곳을 λ°©λ¬Έν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€. μ΄κΈ€μ˜ μΆœμ²˜λŠ” μœ„μ˜ λ§ν¬μž…λ‹ˆλ‹€. 그리디 μ•Œκ³ λ¦¬μ¦˜ ν˜„μž¬ μƒν™©μ—μ„œ μ§€κΈˆ λ‹Ήμž₯ 쒋은 κ²ƒλ§Œ κ³ λ₯΄λŠ” 방법을 μ˜λ―Έν•©λ‹ˆλ‹€. 졜적 해에 κ°€κΉŒμš΄ 값을 ꡬ할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 맀 μˆœκ°„λ§ˆλ‹€ 졜적의 방법을 μ„ νƒν•˜μ—¬ 값을 κ΅¬ν•˜μ§€λ§Œ 결과적으둜 졜적 ν•΄λΌλŠ” 보μž₯은 μ—†μŠ΅λ‹ˆλ‹€. 합이 κ°€μž₯ 큰 값을 κ΅¬ν•΄μ•Όν•˜λŠ” μ˜ˆμ œμ—μ„œ λ‹€μŒ 그림을 κ·Έ..
[Swift] (λΆ„ν•  정볡) 퀡 μ •λ ¬ κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/μ•Œκ³ λ¦¬μ¦˜
이글은 λΉ„μ „κ³΅μž 취쀀생이 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ https://babbab2.tistory.com/101 μ΄κ³³μ—μ„œ ν™•μΈν•΄μ£Όμ„Έμš”! λͺ¨λ“  μ΄λ―Έμ§€μ˜ μΆœμ²˜λŠ” μœ„μ˜ ν‹°μŠ€ν† λ¦¬μž„μ„ λ°νž™λ‹ˆλ‹€. λΆ„ν•  정볡 문제λ₯Ό λ‚˜λˆŒ 수 없을 λ•ŒκΉŒμ§€ λ‚˜λˆ„μ–΄μ„œ ν’€κ³ , λ‚˜λˆ„μ–΄μ„œ ν‘Ό 문제λ₯Ό λ‹€μ‹œ ν•©λ³‘ν•˜μ—¬ 닡을 μ–»λŠ” μ•Œκ³ λ¦¬μ¦˜ ν•˜μ–‘μ‹ μ ‘κ·Όλ²•μœΌλ‘œ 일반적으둜 μž¬κ·€ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•©λ‹ˆλ‹€. 퀡 μ •λ ¬ ν•˜λ‚˜μ˜ 리슀트λ₯Ό pivot(기쀀점)을 κΈ°μ€€μœΌλ‘œ 2개의 λΉ„κ· λ“±ν•œ 크기둜 λΆ„ν• ν•˜κ³  λΆ„ν• λœ λΆ€λΆ„ 리슀트λ₯Ό μ •λ ¬ν•œ λ‹€μŒ, 2개의 μ •λ ¬λœ λΆ€λΆ„ 리슀트λ₯Ό ν•©ν•˜μ—¬ 전체가 μ •λ ¬λœ λ¦¬μŠ€νŠΈκ°€ λ˜κ²Œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. μ‰½κ²Œ μƒκ°ν•˜λ©΄ 배열을 λΆ„ν• ν•˜κ³  μ •λ ¬ν•œ λ‹€μŒ, λ‹€μ‹œν•©μΉ˜λŠ” 방법인 것 κ°™μŠ΅λ‹ˆλ‹€. ν€΅μ •λ ¬μ˜ μˆœμ„œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 1. 기쀀점(pivot)을 ..
[Swift] κΉŠμ΄μš°μ„ νƒμƒ‰(DFS) κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/μ•Œκ³ λ¦¬μ¦˜
이 글은 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±λœ κΈ€μž„μ„ λ°νž™λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ https://babbab2.tistory.com/107 이곳을 ν™•μΈν•΄μ£Όμ„Έμš”! κΉŠμ΄μš°μ„ νƒμƒ‰(DFS) νƒμƒ‰ν•˜λ €λŠ” λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œλΆ€ν„° μš°μ„  νƒμƒ‰ν•˜λŠ” 방식 탐색 λ…Έλ“œμ˜ 인접 λ…Έλ“œμ˜ μžμ‹ λ…Έλ“œλ“€μ„ λͺ¨λ‘ νƒμƒ‰ν•˜κ³ , λ‹€μ‹œ λŒμ•„κ°€μ„œ λ‹€λ₯Έ μΈμ ‘λ…Έλ“œμ˜ μžμ‹λ“€μ„ λͺ¨λ‘ νƒμƒ‰ν•©λ‹ˆλ‹€. 탐색 λ…Έλ“œμ˜ κ°€μž₯ κΉŠμ€ λ†’λ“œκΉŒμ§€ λ‹€ 탐색해야 λ‹€μŒ μΈμ ‘λ…Έλ“œλ₯Ό 탐색할 수 μžˆμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„ 탐색할 κ·Έλž˜ν”„ 미리 λ§Œλ“€μ–΄λ‘κΈ° let graph: [String: [String]] = [ "A" : ["B", "C"], "B" : ["A", "D", "E"], "C" : ["A", "F"], "D" : ["B"], "E" : ["B"], "F" : ["C"], ] κΉŠμ΄μš°μ„ νƒμƒ‰μ„ ν•˜λŠ” ..
[Swift] λ„ˆλΉ„μš°μ„ νƒμƒ‰(BFS) κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/μ•Œκ³ λ¦¬μ¦˜
이 글은 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±λœ κΈ€μž„μ„ λ°νž™λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ https://babbab2.tistory.com/106 μ΄κ³³μ—μ„œ ν™•μΈν•΄μ£Όμ„Έμš”! λ„ˆλΉ„μš°μ„ νƒμƒ‰(BFS) Breadth-First Search μΈμ ‘ν•œ λ…Έλ“œλ₯Ό μš°μ„ ν•˜μ—¬ νƒμƒ‰ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 탐색 λ…Έλ“œλ‘œλΆ€ν„° μΈμ ‘ν•œ λ…Έλ“œλ₯Ό λ¨Όμ € νƒμƒ‰ν•˜κ³ , λ‹€ νƒμƒ‰ν•˜λ©΄ μΈμ ‘ν•œ λ…Έλ“œμ˜ μΈμ ‘ν•œ λ…Έλ“œλ“€λΆ€ν„° νƒμƒ‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 같은 λ ˆλ²¨μ— μžˆλŠ” λ…Έλ“œλ“€λΆ€ν„° νƒμƒ‰ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. 참고둜 μ™Όμͺ½λΆ€ν„° 탐색할지, 였λ₯Έμͺ½λΆ€ν„° 탐색할지 같은 μˆœμ„œλŠ” μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„ 1. 탐색할 κ·Έλž˜ν”„ 미리 λ§Œλ“€μ–΄λ‘κΈ° let graph: [String: [String]] = [ "A" : ["B", "C"], "B" : ["A", "D", "E"], "C" : ["A", "F"], "D"..
[Swift] κ·Έλž˜ν”„(Graph)
Β·
πŸ’» CS/자료ꡬ쑰
이 글은 개인적인 곡뢀λ₯Ό μœ„ν•΄ μž‘μ„±ν•˜λŠ” κ²ƒμž„μ„ λ°νž™λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ https://babbab2.tistory.com/105 을 λ°©λ¬Έν•΄μ£Όμ„Έμš”! κ·Έλž˜ν”„ λ…Έλ“œ(정점)κ³Ό κ°„μ„ (브랜치)둜 이루어진 자료ꡬ쑰 μ—°κ²°λ˜μ–΄μžˆλŠ” μ›μ†Œκ°„μ˜ 관계λ₯Ό ν‘œν˜„ν•œ 자료ꡬ쑰 μ‹€μƒν™œμ˜ ν˜„μƒμ΄λ‚˜ 사물을 κ·Έλž˜ν”„λ‘œ ν™œμš©ν•  수 있음 μ•Œκ³  μžˆμ–΄μ•Ό ν•  κ·Έλž˜ν”„ κ΄€λ ¨ μš©μ–΄ λ…Έλ“œ(정점) 컴퓨터 과학에 μ“°μ΄λŠ” 기초적인 λ‹¨μœ„ 즉, μœ„μ˜ κ·Έλ¦Όμ—μ„œλŠ” 동그라미 ν•˜λ‚˜κ°€ λ…Έλ“œλ‹€. κ·Έλž˜ν”„μ—μ„œ λ…Έλ“œλŠ” λŒ€μ‘ν•˜λŠ” 개체λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 정점이닀. κ°„μ„ (브랜치) 객체 사이λ₯Ό μž‡λŠ” μ—°κ²° κ²½μš°μ— 따라 λ…Έλ“œ 사이λ₯Ό μž‡λŠ” 각 μ—°κ²°μ˜ 강도λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°€μ€‘μΉ˜λ₯Ό κ°–λŠ”λ‹€. 인접 정점 간선에 μ˜ν•΄ 직접 μ—°κ²°λœ λ…Έλ“œ μœ„μ˜ κ·Έλž˜ν”„ κ·Έλ¦Όμ—μ„œ 1의 인접 정점은 5와 2, 6의 인접 정점은 4 참고둜 ..
[Swift] 덱 κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/자료ꡬ쑰
덱 μŠ€νƒκ³Ό 큐의 νŠΉμ„±μ„ λͺ¨λ‘ κ°–λŠ”, λ‘˜μ„ μ‘°ν•©ν•œ ν˜•νƒœμ˜ 자료ꡬ쑰 덱의 ADT(Abstract Data Type)λ₯Ό κ΅¬μ„±ν•˜λŠ” 핡심 ν•¨μˆ˜ λ„€κ°€μ§€μ˜ κΈ°λŠ₯은 λ‹€μŒκ³Ό κ°™λ‹€. - μ•žμœΌλ‘œ λ„£κΈ° - λ’€λ‘œ λ„£κΈ° - μ•žμ—μ„œ λΉΌκΈ° - λ’€μ—μ„œ λΉΌκΈ° 덱은 λ¨Έλ¦¬μ—μ„œ 좔가와 μ‚­μ œκ°€ μ΄λ€„μ§€λŠ” 것은 λ¬Όλ‘  꼬리에 μœ„μΉ˜ν•œ λ…Έλ“œμ—μ„œ 좔가와 μ‚­μ œκ°€ μ΄λ€„μ§„λ‹€λŠ” μ μ—μ„œ μ–‘λ°©ν–₯ μ—°κ²°λ¦¬μŠ€νŠΈλ₯Ό 기반으둜 덱을 κ΅¬ν˜„ν•˜λŠ” κ²½μš°κ°€ 많고, μ΄λŠ” 덱 κ΅¬ν˜„μ— μžˆμ–΄μ„œ 맀우 쒋은 선택이라 ν•  수 μžˆλ‹€. μ—¬κΈ°μ„œ κ°„λ‹¨ν•˜κ²Œλ§Œ 덱을 κ΅¬ν˜„ν•΄λ³΄μ•˜λ‹€. class Deque{ var enQueue: [T] var deQueue: [T] = [] var count: Int { return enQueue.count + deQueue.count } var isEmpty: Bool { ..
[Swift] μŠ€νƒ κ΅¬ν˜„ν•΄λ³΄κΈ°
Β·
πŸ’» CS/자료ꡬ쑰
Stack LIFO : λ§ˆμ§€λ§‰μœΌλ‘œ λ“€μ–΄μ˜¨ λ†ˆμ΄ 첫번째둜 λ‚˜κ°€λŠ” 자료ꡬ쑰 struct Stack { private var stack: [T] = [] public var count: Int { return stack.count } public var isEmpty: Bool { return stack.isEmpty } public mutating func push(_ element: T) { stack.append(element) } public mutating func pop() -> T? { return isEmpty ? nil : stack.popLast() } } μ‚¬μš© var myStack = Stack() myStack.push(10) myStack.pop() μ‹œκ°„λ³΅μž‘λ„λŠ” O(1)이닀. 그런데 S..
JerryiOS
'πŸ’» CS' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (2 Page)