Try โ€‚โ€‰HackMD

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” (์•Œ์“ฐ)

์Šคํ„ฐ๋”” ๋ชฉ์ /๋ชฉํ‘œ

  • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ์—…์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์™€ ์นœํ•ด์ง€๊ธฐ ์œ„ํ•ด
  • ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์‚ฌ๊ณ ๋ ฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด

ํ•™์Šตํ•  ๋‚ด์šฉ

์ž๋ฃŒ๊ตฌ์กฐ

  • 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

๋ฌธ์ œ ํ’€์ด ํ”Œ๋žซํผ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    • ์‹ค์ œ ๊ธฐ์—…๋“ค์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค
    • ๋ ˆ๋ฒจ ๋ณ„ ๋‚œ์ด๋„๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋‹ค.
    • ์นด์นด์˜ค ์ฝ”ํ…Œ ๊ธฐ์ถœ ๋ฌธ์ œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค
  • LeetCode
    • ๋ฐฉ๋Œ€ํ•œ ๋ฌธ์ œ
    • ๋ฌธ์ œ๊ฐ€ ์˜์–ด๋กœ ๋˜์–ด์žˆ์œผ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ์ž˜ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ๋‹ค
    • ๊ฐ๊ตญ ๊ณ ์ˆ˜๋“ค์˜ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•™์Šต ๋ฐฉ์‹

์˜๋…ผ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„

  • 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 ์Œ“๊ธฐ)
    • ๋ฌธ์ œ๋Š” ํ•ด๋‹นํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์— ๋งž๋Š” ๊ฒƒ์œผ๋กœ ์„ ํƒ
    • (+) ์ถ”๊ฐ€ ํ’€์ด ๋ฐ ํ•™์Šต์€ ์ž์œ !

๋ฌธ์ œ ํ’€์ด ๋“ฑ๋ก ์˜ˆ์‹œ

// ex. Sorting the Sentence.swift
// 1. Logic (ํ’€์ด ๋ฐฉ์‹)
// ~~

// 2. Solution (ํ’€์ด) 
func solution() {

}

๊ทœ์น™, ์„ธ๋ถ€ ์šด์˜๋ฐฉ์•ˆ์ด ์ •ํ•ด์ง€๋ฉด ์ปค๋ฐ‹ ๊ทœ์น™, ๋ธŒ๋žœ์น˜, ๊ฐœ๋ณ„ ํด๋” ์ƒ์„ฑํ• ๊ฒŒ์š”~!

์ฐธ๊ณ  ํ•™์Šต ์ž๋ฃŒ

Swift Algorithm Club

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… - ๋ธ”๋กœ๊ทธ(Ries ๋งˆ๋ฒ•์˜ ์Šˆํผ๋งˆ๋ฆฌ์˜ค)

์ง„ํ–‰๋ฐฉ์‹

  • 1/5๊นŒ์ง€๋Š” ๋ง›๋ณด๊ธฐ
    • ๋ฌธ์ž์—ด (์นด์นด์˜ค)
    • ์‹ ๊ทœ ํšŒ์› (์นด์นด์˜ค)
  • 1/12์— ์ง„์งœ! ์‹œ์ž‘!
    • 5๋ฌธ์ œ

๐Ÿค” Algorithm ์Šคํ„ฐ๋”” A๋ฐ˜

๐Ÿค“ ์ฐธ์—ฌ์ž

๋ชฉ์ฐจ

๐Ÿค“ ๊ณตํ†ต 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
// Logic (ํ’€์ด ๋ฐฉ์‹)
// 1. ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค
// 2. popํ•ด์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค
// 3. ~~ 

// Solution (ํ’€์ด) 
func solution() {
    // code 
}