πŸ“‚ 자료ꡬ쑰/μ •λ ¬

    μΉ΄μš΄νŒ… μ •λ ¬ (Counting Sort)

    1. κ°œλ… πŸ‘‘ 'κ³„μˆ˜ μ •λ ¬'이라고도 λΆˆλ¦¬λŠ” 'μΉ΄μš΄νŒ… μ •λ ¬(Counting Sort)'은 각 μ›μ†Œλ“€μ΄ λͺ‡ κ°œμ”© μžˆλŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” count배열을 ν™œμš©ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 각 μ›μ†Œμ˜ 값이 count λ°°μ—΄μ˜ μΈλ±μŠ€κ°€ λ˜λ―€λ‘œ 'μ •μˆ˜λ‚˜ μ •μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆλŠ” 자료'에 λŒ€ν•΄μ„œλ§Œ 적용 κ°€λŠ₯ν•˜λ‹€. 2. λ™μž‘λ°©μ‹ πŸŽ“ λ™μž‘ 방식은 λ‹€μŒκ³Ό κ°™λ‹€. μ›μ†Œμ˜ μ΅œλŒ“κ°’μ„ 포함할 수 μžˆλŠ” λ°°μ—΄ μ„€μ • 각각의 μ›μ†Œκ°€ λͺ‡ 번 λ“±μž₯ν•˜λŠ”μ§€ μΉ΄μš΄νŒ… count λ°°μ—΄μ˜ 인덱슀 = μ›μ†Œ κ°’ count λ°°μ—΄μ˜ κ°’ = λ“±μž₯ 횟수 count 배열을 λˆ„μ ν•©μœΌλ‘œ λ§Œλ“€μ–΄μ£ΌκΈ° μ •λ ¬λ˜μ§€ μ•Šμ€ λ°°μ—΄(μ΄ˆκΈ°κ°’)의 λ’€μ—μ„œλΆ€ν„° λŒλ©΄μ„œ, μ›μ†Œμ˜ κ°’κ³Ό λ™μΌν•œ μΈλ±μŠ€κ°€ κ°€λ¦¬ν‚€λŠ” 곳에 μ›μ†Œ λ°°μΉ˜ν•΄ μ£ΌκΈ° '0 2 1 1 4 4 4 3 5'κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ λ™μž‘λ°©μ‹μ„ μ•„λž˜μ˜ 그림을 ..

    퀡 μ •λ ¬ (Quick Sort)

    1. μ •μ˜ πŸ‘¨‍πŸš€ 퀡 μ •λ ¬(Quick Sort)은 λΆ„ν•  정볡 방법을 μ΄μš©ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 퀡 정렬은 ν”Όλ²—(Pivot)을 κΈ°μ€€μœΌλ‘œ λΆ„ν• κ³Ό 정볡이 μ΄λ£¨μ–΄μ§€κ²Œ λœλ‹€. 퀡 정렬은 '피벗을 μ„ νƒν•˜λŠ” 방식'κ³Ό 'μž¬κ·€ λ˜λŠ” λΉ„μž¬κ·€ 방식'의 선택에 따라 λ‹€μ–‘ν•œ κ΅¬ν˜„ 방법이 μ‘΄μž¬ν•œλ‹€. 이번 κΈ€μ—μ„œλŠ” 'μ™Όμͺ½ 피벗을 μ„ νƒν•˜λŠ” 방식'κ³Ό 'μž¬κ·€ 방식'을 ν†΅ν•œ 퀡 정렬을 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž. 2. λ™μž‘ 방식 🦸‍♂️ 기본적인 λ™μž‘ 방식은 μ•„λž˜μ™€ κ°™λ‹€. λ°°μ—΄μ—μ„œ μž„μ˜μ˜ μ›μ†ŒμΈ pivot을 μ„ νƒν•œλ‹€. (ν•΄λ‹Ή κΈ€μ—μ„œλŠ” λ°°μ—΄μ—μ„œ 제일 μ™Όμͺ½ μ›μ†Œλ₯Ό pivot으둜 μ„ νƒν•œλ‹€.) pivot을 κΈ°μ€€μœΌλ‘œ pivot보닀 μž‘μ€ μ›μ†ŒλŠ” μ™Όμͺ½μœΌλ‘œ, pivot보닀 큰 μ›μ†ŒλŠ” 였λ₯Έμͺ½μ— μ˜€λ„λ‘ 배열을 λ°°μΉ˜ν•œλ‹€. pivot을 κΈ°μ€€μœΌλ‘œ λ‚˜λˆ„μ–΄μ§„ μ™Όμͺ½ λ°°μ—΄κ³Ό ..

    νž™ μ •λ ¬ (Heap Sort)

    1. μ •μ˜ πŸ„‍♂️ νž™μ •λ ¬μ΄λž€ 자료ꡬ쑰 νž™(Heap)을 기반으둜 ν•˜λŠ” μ •λ ¬ 방식이닀. μ˜€λ¦„μ°¨μˆœ 정렬일 경우 μ΅œλŒ€νž™μ„ μ΄μš©ν•˜κ³  λ‚΄λ¦Όμ°¨μˆœ 정렬일 경우 μ΅œμ†Œνž™μ„ μ΄μš©ν•œλ‹€. κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•˜μžλ©΄ νž™ 정렬은 λ£¨νŠΈλ…Έλ“œλ₯Ό μ œκ±°ν•˜κ³  제거된 루트 λ…Έλ“œλ₯Ό λ°°μ—΄μ˜ λ’·λΆ€λΆ„λΆ€ν„° μ±„μ›Œ λ„£μœΌλ©΄μ„œ 정렬이 μ΄λ£¨μ–΄μ§€λŠ” 것이닀. 2. λ™μž‘ 방식 🚣‍♂️ μ΅œλŒ€νž™μ„ μ΄μš©ν•˜μ—¬ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” 경우λ₯Ό 생각해 보자. κ°€μž₯ μ‰½κ²Œ 생각할 수 μžˆλŠ” λ™μž‘λ°©μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€. μ •λ ¬ν•΄μ•Ό ν•˜λŠ” μ›μ†Œλ“€μ„ ν•˜λ‚˜μ”© νž™μ— λ„£μ–΄μ€€λ‹€. μ‚­μ œλ₯Ό ν•˜λ©΄μ„œ 루트 λ…Έλ“œλ₯Ό κ°€μ Έμ˜€κ³  그것을 λ°°μ—΄μ˜ λ’·λΆ€λΆ„λΆ€ν„° μ±„μš΄λ‹€. μ΄λ ‡κ²Œ ν•œλ‹€λ©΄ κΈ°μ‘΄ λ°°μ—΄λ‘œλΆ€ν„° νž™μ„ κ΅¬μ„±ν•˜λŠ” λ°°μ—΄ ν•˜λ‚˜λ₯Ό μΆ”κ°€μ μœΌλ‘œ λ§Œλ“€κ³ (1번 κ³Όμ •), λ’·λΆ€λΆ„λΆ€ν„° μ •λ ¬λœ μ›μ†Œλ“€μ„ 넣을 배열을 ν•˜λ‚˜ 더 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.(2번 κ³Όμ •..

    μœ„μƒ μ •λ ¬(Topology Sort)

    1. μ •μ˜ 🧊 μœ„μƒ μ •λ ¬(Topology Sort)μ΄λž€ μˆœμ„œκ°€ μ •ν•΄μ Έ μžˆλŠ” μž‘μ—…μ„ μ°¨λ‘€λŒ€λ‘œ μˆ˜ν–‰ν•  λ•Œ κ·Έ μˆœμ„œλ₯Ό κ²°μ •ν•΄ μ£ΌλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. κ΅μœ‘κ³Όμ •μ˜ μ„ μˆ˜κ³Όλͺ©μ΄ μœ„μƒ 정렬을 μ„€λͺ…ν•˜λŠ” κ°€μž₯ μ μ ˆν•œ μ˜ˆμ‹œμ΄λ‹€. 컴퓨터 곡학을 μ „κ³΅ν•˜κ³  μžˆλŠ” 학생은 λ‹€μŒ 전곡과λͺ©(ex. μ•Œκ³ λ¦¬μ¦˜)을 λ“£κΈ° μœ„ν•΄μ„œλŠ” μ„ μˆ˜ κ³Όλͺ©(ex. 자료ꡬ쑰)을 ν•„μˆ˜μ μœΌλ‘œ λ“€μ–΄μ•Ό ν•œλ‹€. κΈ°μ΄ˆμ»΄ν“¨ν„°ν”„λ‘œκ·Έλž˜λ° → 자료ꡬ쑰 → μ•Œκ³ λ¦¬μ¦˜ 자료ꡬ쑰 → λ…Όλ¦¬νšŒλ‘œλ°μ„€κ³„ → λ…Όλ¦¬νšŒλ‘œμ‹€ν—˜ μ•Œκ³ λ¦¬μ¦˜ → λ…Όλ¦¬νšŒλ‘œλ°μ„€κ³„ → λ…Όλ¦¬νšŒλ‘œμ‹€ν—˜ λ˜ν•œ, μœ„μƒμ •λ ¬μ€ μœ„μ™€ 같이 μ—¬λŸ¬ 개의 κ²½λ‘œκ°€ μ‘΄μž¬ν•  수 μžˆλ‹€. λ§ˆμ§€λ§‰ νŠΉμ§•μœΌλ‘œλŠ” μœ„μƒ 정렬은 λΉ„μˆœν™˜ 유ν–₯ κ·Έλž˜ν”„(DAG - Directed Acyclic Graph)μ—λ§Œ 적용이 κ°€λŠ₯ν•˜λ‹€. 즉, 사이클이 λ°œμƒν•˜μ§€ μ•ŠλŠ” λ°©ν–₯ κ·Έλž˜ν”„μ—¬μ•Ό ν•œ..

    병합 μ •λ ¬(Merge Sort)

    합병정렬이라고도 λΆˆλ¦¬λŠ” 병합정렬에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. 1. μ •μ˜ πŸŽƒ λ³‘ν•©μ •λ ¬μ΄λž€ μ •λ ¬ν•΄μ•Ό ν•˜λŠ” 배열을 κ°€μž₯ μž‘μ„ λ•ŒκΉŒμ§€ λ‚˜λˆ„κ³ , κ·Έ μ‹œμ λΆ€ν„° μΈμ ‘ν•œ 뢀뢄배열끼리 λΉ„κ΅ν•˜λ©° μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„ν•  정볡(Divide and Conquer) μ•Œκ³ λ¦¬μ¦˜μ„ 기반으둜 ν•œλ‹€. (λΆ„ν•  정볡(Divide and Conquer)μ΄λž€ 문제λ₯Ό λΆ„ν• ν•˜κ³ , λΆ„ν• ν•œ 문제λ₯Ό μ •λ³΅ν•˜μ—¬ ν•©μΉ˜λŠ” 것이닀.) 2. λ™μž‘ 방식 πŸŽͺ 주어진 배열을 절반으둜 λΆ„ν• ν•˜μ—¬ λΆ€λΆ„λ°°μ—΄λ‘œ λ‚˜λˆˆλ‹€. - λΆ„ν• (Divide) ν•΄λ‹Ή λΆ€λΆ„λ°°μ—΄μ˜ 길이가 1이 될 λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ 1번 과정을 λ°˜λ³΅ν•œλ‹€. μΈμ ‘ν•œ λΆ€λΆ„ 배열끼리 ν•©μΉœλ‹€. - 정볡(Conquer) μœ„μ˜ 그림을 톡해 μ•Œ 수 μžˆλ“―μ΄ 크기가 1이 될 λ•ŒκΉŒμ§€ 뢄할이 μ§„ν–‰λœλ‹€. 그리고 μΈμ ‘ν•œ 배열끼리 ν•©..

    μ‚½μž… μ •λ ¬(Insertion Sort)

    1. μ •μ˜ 🧡 μ‚½μž… 정렬은 μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 이미 μ •λ ¬λœ λ°°μ—΄ λΆ€λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬, μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‚½μž…ν•¨μœΌλ‘œμ¨ 정렬을 μ™„μ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. μΉ΄λ“œ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ μ‰½κ²Œ 이해할 수 μžˆμ„ 것이닀. '4, 2, 3, 1, 5'λΌλŠ” 숫자 적힌 5μž₯의 μΉ΄λ“œκ°€ μˆœμ„œλŒ€λ‘œ μžˆλ‹€κ³  ν•˜μž. μ•žμ—μ„œλΆ€ν„° μˆœμ„œλŒ€λ‘œ μΉ΄λ“œλ₯Ό λ½‘μœΌλ©΄μ„œ 손에 μ₯”λ‹€κ³  μƒκ°ν•˜μž. λ½‘νžŒ μΉ΄λ“œλŠ” 이미 손에 μ₯μ–΄μ§„ μΉ΄λ“œλ“€ 사이에 μœ„μΉ˜λ₯Ό μ°Ύμ•„λ“€μ–΄κ°„λ‹€. 이미 손에 μ₯μ–΄μ Έ μžˆλŠ” μΉ΄λ“œλ“€ 뽑은 μΉ΄λ“œ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„λ“€μ–΄κ°„ λͺ¨μŠ΅ 4 4 4 2 2 4 2 4 3 2 3 4 2 3 4 1 1 2 3 4 1 2 3 4 5 1 2 3 4 5 1번 μˆ«μžκ°€ 적힌 μΉ΄λ“œκ°€ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„κ°€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ μ‚΄νŽ΄λ³΄μž. 1번 μΉ΄λ“œλŠ” 4번과 λΉ„κ΅ν•˜κ³ , 3번과 λΉ„κ΅ν•˜κ³ , 2번과 ..

    선택 μ •λ ¬(Selection Sort)

    선택 정렬은 μ—¬λŸ¬ 가지 λ©΄μ—μ„œ μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ 버블 μ •λ ¬κ³Ό μƒλ‹Ήνžˆ λΉ„μŠ·ν•˜λ‹€. 두 가지 μ •λ ¬ 방법을 κ΅¬λΆ„ν•˜λŠ” 게 μ–΄λ ΅μ§€λŠ” μ•ŠμœΌλ‹ˆ, 선택 정렬을 κ³΅λΆ€ν•˜λŠ” 김에 버블 정렬도 같이 κ³΅λΆ€ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€. 1. μ •μ˜ 🎿 선택 정렬은 μ›μ†Œλ₯Ό 넣을 μœ„μΉ˜λŠ” 이미 μ •ν•΄μ Έ 있고, μ–΄λ–€ μ›μ†Œλ₯Ό 넣을지 μ„ νƒν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 2. λ™μž‘ 방식 🧦 N개의 μ›μ†Œκ°€ μžˆλ‹€κ³  ν•˜μž. μš°μ„ , λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ”λ‹€. 그리고 첫 번째 μ›μ†Œμ™€ λ°°μ—΄μ—μ„œ 찾은 μ΅œμ†Ÿκ°’μ˜ μ›μ†Œλ₯Ό λ°”κΏ”μ€€λ‹€. 이것이 1νšŒμ „ μˆ˜ν–‰ν•œ 것이닀. μ΄λ ‡κ²Œ 되면 λ°°μ—΄μ˜ 첫 λ²ˆμ§Έμ— μœ„μΉ˜ν•œ μ›μ†Œκ°€ κ°€μž₯ μž‘μ€ 값을 κ°€μ§€κ²Œ λœλ‹€. 2νšŒμ „μ„ μˆ˜ν–‰ν•  λ•ŒλŠ” 첫 번째 μ›μ†Œλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ λ°°μ—΄λ“€ μ€‘μ—μ„œ μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ”λ‹€. 그리고 ν•΄λ‹Ή μ›μ†Œμ™€ λ°°μ—΄μ˜ 두 번째 μ›μ†Œλ₯Ό λ°”κΏ”μ€€λ‹€. 이와 같은 λ°©μ‹μœΌ..

    버블 μ •λ ¬(Bubble Sort)

    κ±°ν’ˆ 정렬이라고도 λΆˆλ¦¬λŠ” 버블 정렬에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž. 1. μ •μ˜ πŸ‘Ÿ 버블 정렬은 μ„œλ‘œ μΈμ ‘ν•œ 두 μ›μ†Œλ₯Ό κ²€μ‚¬ν•˜μ—¬ μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 2. λ™μž‘ 방식 πŸ‘ž N개의 μ›μ†Œκ°€ μžˆλ‹€κ³  ν•˜μž. 첫 번째 μ›μ†Œμ™€ 두 번째 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ λ§Œμ•½ 첫 번째 μ›μ†Œκ°€ 더 크닀면 λ‘˜μ˜ 자리λ₯Ό λ°”κΏ”μ€€λ‹€. 그리고 두 번째 μ›μ†Œμ™€ μ„Έ 번째 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ λ§Œμ•½ 두 번째 μ›μ†Œκ°€ 더 크닀면 λ‘˜μ˜ 자리λ₯Ό λ°”κΏ”μ€€λ‹€. μ΄λŸ¬ν•œ λ™μž‘μ„ (λ§ˆμ§€λ§‰ - 1) 번째의 μ›μ†Œμ™€ λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό 비ꡐ할 λ•ŒκΉŒμ§€ μˆ˜ν–‰ν•œλ‹€. 이것이 1νšŒμ „ μˆ˜ν–‰ν•œ 것이닀. μ΄λ ‡κ²Œ 되면 λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•œ μ›μ†Œκ°€ κ°€μž₯ 큰 μ›μ†Œκ°€ λœλ‹€. 2νšŒμ „μ„ μˆ˜ν–‰ν•  λ•Œ λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€λ“€μ„ μ •λ ¬ν•΄ μ€€λ‹€. (N - 1) νšŒμ „κΉŒμ§€ μˆ˜ν–‰ν•˜λ©΄ 정렬이 λ§ˆλ¬΄λ¦¬λœλ‹€. μœ„μ˜ 방식은 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정렬을 ..