# ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” (์•Œ์“ฐ) ## ์Šคํ„ฐ๋”” ๋ชฉ์ /๋ชฉํ‘œ - ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ์—…์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด - ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์™€ ์นœํ•ด์ง€๊ธฐ ์œ„ํ•ด - ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์‚ฌ๊ณ ๋ ฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ## ํ•™์Šตํ•  ๋‚ด์šฉ ### ์ž๋ฃŒ๊ตฌ์กฐ - array - linked list - **stack** - **queue** - deque - tree - graph - BST - heap - hash table ### ์•Œ๊ณ ๋ฆฌ์ฆ˜ - big-O - sorting ์ผ๋ฐ˜/๊ณ ๊ธ‰ - **simulation** - **brute force** - recursion - iteration - binary search - **BFS/DFS** - backtracking - divide and conquer - bit manipulation - **two pointers** - **sliding window** - **dynamic programming** ## ๋ฌธ์ œ ํ’€์ด ํ”Œ๋žซํผ - [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค](https://programmers.co.kr/) - ์‹ค์ œ ๊ธฐ์—…๋“ค์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค - ๋ ˆ๋ฒจ ๋ณ„ ๋‚œ์ด๋„๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋‹ค. - ์นด์นด์˜ค ์ฝ”ํ…Œ ๊ธฐ์ถœ ๋ฌธ์ œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค - [LeetCode](https://leetcode.com/) - ๋ฐฉ๋Œ€ํ•œ ๋ฌธ์ œ - ๋ฌธ์ œ๊ฐ€ ์˜์–ด๋กœ ๋˜์–ด์žˆ์œผ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ์ž˜ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ๋‹ค - ๊ฐ๊ตญ ๊ณ ์ˆ˜๋“ค์˜ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ## ํ•™์Šต ๋ฐฉ์‹ ### ์˜๋…ผ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„ - Swift๋กœ ์ฝ”ํ…Œ ์ค€๋น„?? - swift๋ฅผ ์ œ์™ธํ•œ ์–ธ์–ด๋กœ ์‘์‹œ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ข…์ข… swift๋กœ ์ œํ•œ์ด ๊ฑธ๋ ค์žˆ๋Š” ํšŒ์‚ฌ๋„ ์žˆ๋‹ค. - ์Šคํ„ฐ๋””์› ๊ฐ„์˜ ์†Œํ†ต์„ ์œ„ํ•œ ์–ธ์–ด ํ†ต์ผ? - ์†Œ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์„œ๋กœ ํ™•์ธ?? - ์ธ์›์ด ๋งŽ๊ธฐ์— 3๊ฐœ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์–ด ์„ธ๋ถ€ ์šด์˜ - ์†Œ๊ทธ๋ฃน๋ณ„ ์ฃผ๊ฐ„/์›”๊ฐ„ ๋ชฉํ‘œ ์„ค์ • - ex) 1์ฃผ์ฐจ Sorting ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•™์Šต, 2์ฃผ์ฐจ brute-force ํ•™์Šต - ex) 1์ฃผ์ฐจ DFS ํ’€์ด, 2์ฃผ์ฐจ DP ํ’€์ด - ๋‚œ์ด๋„๋ณ„ ๊ทธ๋ฃน ๋ถ„๋ฐ˜?? - (ํ•™์Šต)๊ธฐ์ดˆ๋ถ€ํ„ฐ ํ•™์Šตํ•˜๋Š” A๋ฐ˜ - ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ํ•™์Šต ๋ฐ ๊ธฐ๋ณธ ์œ ํ˜•์— ๋Œ€ํ•œ ๋ฌธ์ œ ํ’€์ด - (์ค€๋น„) ์œ ํ˜•๋ณ„ ๋ฌธ์ œํ’€์ด ๋ฐ”๋กœ ์ง„ํ–‰ํ•˜๋Š” B๋ฐ˜ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… ์ง€์‹์ด ์„ ํ–‰๋˜์–ด์žˆ์Œ์„ ๊ฐ€์ • - ์ฝ”ํ…Œ ์ค€๋น„ ํ˜•ํƒœ๋กœ ๋ฌธ์ œ ํ’€์ด๋ฅผ ๋งŽ์ดํ•˜์—ฌ ์œ ํ˜•์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋‘  - ๋ถ„๋ฐ˜์‹œ์— B๋ฐ˜ 1๋ช…์ด, A๋ฐ˜ 2~3๋ช… ๋ฉ˜ํ‹ฐ(?)์ฒ˜๋Ÿผ ๋งก์•„์„œ ์ง„ํ–‰ - ๋ถ„๋ฐ˜ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์„œ๋กœ ๋”ฐ๋กœ ํ•˜๋Š” ๊ฒƒ์€ X, ์„œ๋กœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์งˆ์˜์‘๋‹ต์€ ์ž์œ ๋กญ๊ฒŒ, ํ•™์Šต์— ์žˆ์–ด์„œ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์€ ์„œ๋กœ ๊ณต์œ  ๋ฐ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ํ”ผ๋“œ๋ฐฑ ์ฃผ๊ณ  ๋ฐ›๊ธฐ --- - **๋งค์ฃผ ์ˆ˜์š”์ผ ์˜คํ›„ 14:00~16:00** ์ง„ํ–‰ ์˜ˆ์ • (1~2์‹œ๊ฐ„ ์†Œ์š” ์˜ˆ์ •) ํ•™์Šต์€ ์Šคํ„ฐ๋”” ๋ฐฉ์‹/๊ฐœ์ธ ํ•™์Šต ๋ฐฉ์‹์„ ๋ณ‘ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ„ฐ๋”” ๋•Œ์—๋Š” ๋ฏธ๋ฆฌ ํ•™์Šตํ•ด์˜จ ๊ฐœ๋…๋“ค์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ์ ๋“ฑ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ ๋ณด๊ณ  ํ’€์ด๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. #### ๋Œ€๋žต์ ์ธ ์ผ์ฃผ์ผ ์Šค์ผ€์ค„ - ์Šคํ„ฐ๋”” ๋ฐฉ์‹ - ์˜ˆ์Šตํ•ด์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์˜๊ฒฌ ๋‚˜๋ˆ„๊ธฐ - ๋ฏธ๋ฆฌ issue๋กœ ๋“ฑ๋กํ•˜์—ฌ ์ด์•ผ๊ธฐ ์ฃผ์ œ ์„ ํƒ - ๋žœ๋ค์œผ๋กœ 2๋ช…์”ฉ ๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ• ์„ค๋ช… - ๊ฐœ์ธ์ ์œผ๋กœ ์ธ์ƒ๊นŠ์—ˆ๋˜(?), ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ œ ํ’€์ด ์„ค๋ช… - ๊ฐœ์ธ ํ•™์Šต - ๋งค์ผ 2๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ’€์ด (๋‚œ์ด๋„๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ๊ฒฝ์šฐ ๊ธฐ๊ฐ„/๊ฐœ์ˆ˜ ์กฐ์ •) - ์ผ์ฃผ์ผ = 10๋ฌธ์ œ - ํ’€๋‹ค๊ฐ€ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ์„ ๊ฒฝ์šฐ ์„œ๋กœ ๊ณต์œ ํ•˜์—ฌ ํ•จ๊ป˜ ๋ฌธ์ œ ํ•ด๊ฒฐ - Github | oraganization repo์˜ ๋ณธ์ธ ํด๋”์— ๋ฌธ์ œ ํ’€์ด(`.swift` ์Œ“๊ธฐ) - ๋ฌธ์ œ๋Š” ํ•ด๋‹นํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์— ๋งž๋Š” ๊ฒƒ์œผ๋กœ ์„ ํƒ - (+) ์ถ”๊ฐ€ ํ’€์ด ๋ฐ ํ•™์Šต์€ ์ž์œ ! **๋ฌธ์ œ ํ’€์ด ๋“ฑ๋ก ์˜ˆ์‹œ** ```swift // ex. Sorting the Sentence.swift // 1. Logic (ํ’€์ด ๋ฐฉ์‹) // ~~ // 2. Solution (ํ’€์ด) func solution() { } ``` # ๊ทœ์น™, ์„ธ๋ถ€ ์šด์˜๋ฐฉ์•ˆ์ด ์ •ํ•ด์ง€๋ฉด ์ปค๋ฐ‹ ๊ทœ์น™, ๋ธŒ๋žœ์น˜, ๊ฐœ๋ณ„ ํด๋” ์ƒ์„ฑํ• ๊ฒŒ์š”~! ## ์ฐธ๊ณ  ํ•™์Šต ์ž๋ฃŒ [Swift Algorithm Club](https://github.com/raywenderlich/swift-algorithm-club) [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… - ๋ธ”๋กœ๊ทธ(Ries ๋งˆ๋ฒ•์˜ ์Šˆํผ๋งˆ๋ฆฌ์˜ค)](https://blog.naver.com/PostView.naver?blogId=kks227&logNo=220769859177&categoryNo=299&parentCategoryNo=0&viewDate=&currentPage=13&postListTopCurrentPage=&from=postList&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=13) ## ์ง„ํ–‰๋ฐฉ์‹ - 1/5๊นŒ์ง€๋Š” ๋ง›๋ณด๊ธฐ - ๋ฌธ์ž์—ด (์นด์นด์˜ค) - ์‹ ๊ทœ ํšŒ์› (์นด์นด์˜ค) - 1/12์— ์ง„์งœ! ์‹œ์ž‘! - 5๋ฌธ์ œ --- # ๐Ÿค” Algorithm ์Šคํ„ฐ๋”” A๋ฐ˜ ## ๐Ÿค“ ์ฐธ์—ฌ์ž ## ๋ชฉ์ฐจ - [๊ณตํ†ต Rule](#๐Ÿค“-๊ณตํ†ต-rule) - [์ปค๋ฆฌํ˜๋Ÿผ](#๐Ÿค“-์ปค๋ฆฌํ˜๋Ÿผ) - [์ปค๋ฐ‹ ์ปจ๋ฒค์…˜](#๐Ÿค“-์ปค๋ฐ‹-์ปจ๋ฒค์…˜) - [๋ฌธ์ œ ํ’€์ด ๋“ฑ๋ก ๋ฐฉ๋ฒ•](#๐Ÿค“-๋ฌธ์ œ-ํ’€์ด-๋“ฑ๋ก-๋ฐฉ๋ฒ•) - [branch ์‚ฌ์šฉ ๋ฐฉ๋ฒ•](#๐ŸŒด-branch-์‚ฌ์šฉ-๋ฐฉ๋ฒ•) - [ํŒŒ์ผ๋ช… ๊ทœ์น˜](#๐Ÿ“‘-ํŒŒ์ผ๋ช…-๊ทœ์น™) ## ๐Ÿค“ ๊ณตํ†ต Rule - ๋งค์ฃผ `์ˆ˜์š”์ผ` ์ •ํ•ด์ง„ ์‹œ๊ฐ„์— ๋ชจ์—ฌ์„œ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค - ๋งค์ฃผ ์Šคํ„ฐ๋””ํ•œ ๋‚ด์šฉ์€ ์ •๋ฆฌํ•˜์—ฌ github์— ์ •๋ฆฌ ํ›„ ๋””์Šค์ฝ”๋“œ์— ๋งํฌ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. - ๊ฐ์„ ์œ ์ง€ํ•˜๊ณ , ํ•™์Šต ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์ผ ํ’€์ดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿค“ ์ปค๋ฆฌํ˜๋Ÿผ ## ๐Ÿค“ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ - `programmers` : programmers ํ’€์ด - `leetcode` : leetcode ํ’€์ด - `ds` : ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ - `algo` : ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•™์Šตํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ - `chore` : ํด๋”/ํŒŒ์ผ ๊ตฌ์กฐ ๋ณ€๊ฒฝ - `docs` : ๊ณตํ†ต ๋ฌธ์„œ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ ## ๐Ÿค“ ๋ฌธ์ œ ํ’€์ด ๋“ฑ๋ก ๋ฐฉ๋ฒ• ๐Ÿˆโ€โฌ› ๋ฌธ์ œ ํ’€์ด ์ดํ›„ github์— push! (๋ณธ์ธ ๋ธŒ๋žœ์น˜/๋ณธ์ธ ํด๋”๋งŒ ์ง์ ‘์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!) ### ๐ŸŒด branch ์‚ฌ์šฉ ๋ฐฉ๋ฒ• 1. ๋ณธ์ธ branch๋กœ ์ด๋™ 2. ๋ณธ์ธ ํด๋”๋กœ ์ด๋™ 3. ๋ฌธ์ œ ํ’€์ด ํ”Œ๋žซํผ(programmers, leetcode etc) ํด๋” ๋‚ด์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ œ ํ’€์ด ํŒŒ์ผ ์ถ”๊ฐ€ 4. ๋งค์ฃผ ์Šคํ„ฐ๋”” ์ด์ „์— main branch์— merge ### ๐Ÿ“‘ ํŒŒ์ผ๋ช… ๊ทœ์น™ - Programmers: `์ด๋ฆ„_๋ฌธ์ œ๋ช….swift` - ex) `[์ฐจ์ฐจ] ์‹ ๊ทœ ์•„์ด๋”” ์ถ”์ฒœ.swift` - LeetCode: `์ด๋ฆ„_๋ฌธ์ œ๋ช….swift` - ex) `[์ฐจ์ฐจ] Two Sums.swift` - ํŒŒ์ผ ์ž‘์„ฑ ์–‘์‹ ex. `Sorting the Sentence.swift` ```swift // Logic (ํ’€์ด ๋ฐฉ์‹) // 1. ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค // 2. popํ•ด์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค // 3. ~~ // Solution (ํ’€์ด) func solution() { // code } ```