πŸ“‚ 자료ꡬ쑰

    λ°°μ—΄(Array) VS λ°°μ—΄ 리슀트(ArrayList) VS μ—°κ²° 리슀트(LinkedList)

    πŸ“™ 1. λ°°μ—΄ πŸ“Œ 1. κ°œλ… 및 νŠΉμ§• λ°°μ—΄(Array)μ΄λž€ 같은 νƒ€μž…μ˜ μ—¬λŸ¬ λ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 묢음으둜 λ‹€λ£¨λŠ” 것을 λ§ν•œλ‹€. 배열을 κ΅¬μ„±ν•˜λŠ” 각각의 값을 λ°°μ—΄ μš”μ†Œ(Element), λ°°μ—΄μ—μ„œμ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 숫자λ₯Ό 인덱슀(Index)라고 ν•œλ‹€. 배열은 μ°Έμ‘° κ°μ²΄μ΄λ―€λ‘œ 배열을 κ°€λ¦¬ν‚€λŠ” μ°Έμ‘° λ³€μˆ˜λŠ” μŠ€νƒ μ˜μ˜μ— ν• λ‹Ήλ˜λ©°, 이 μ°Έμ‘° λ³€μˆ˜κ°€ 가리킀고 μžˆλŠ” μ£Όμ†Œκ°’μ€ μ‹€μ œ νž™ μ˜μ—­μ— μƒμ„±λ˜λŠ” λ°°μ—΄μ˜ μ£Όμ†Œκ°’μ΄λ‹€. λ°°μ—΄μ˜ ν¬κΈ°λŠ” 고정적이닀. λ©”λͺ¨λ¦¬ 곡간이 μ—°μ†μ μœΌλ‘œ κ΅¬μ„±λœλ‹€. πŸ“Œ 2. μž₯점 인덱슀λ₯Ό ν™œμš©ν•  수 있기 λ•Œλ¬Έμ—, νŠΉμ • μœ„μΉ˜μ— μžˆλŠ” μ›μ†Œμ— λŒ€ν•œ μ ‘κ·Όμ˜ μ‹œκ°„λ³΅μž‘λ„κ°€ O(1)이닀. 인덱슀λ₯Ό ν™œμš©ν•  수 있기 λ•Œλ¬Έμ—, νŠΉμ • μœ„μΉ˜μ— μžˆλŠ” μ›μ†Œμ— λŒ€ν•œ μˆ˜μ •μ˜ μ‹œκ°„λ³΅μž‘λ„κ°€ O(1)이닀. πŸ“Œ 3. 단점 크기가 고정적이기 λ•Œλ¬Έ..

    λ°°μ—΄(Array)

    πŸ“™ 1. λ°°μ—΄μ΄λž€? λ°°μ—΄(Array)μ΄λž€ 같은 νƒ€μž…μ˜ μ—¬λŸ¬ λ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 묢음으둜 λ‹€λ£¨λŠ” 것을 λ§ν•œλ‹€. 배열을 κ΅¬μ„±ν•˜λŠ” 각각의 값을 λ°°μ—΄ μš”μ†Œ(Element)라고 ν•˜λ©°, λ°°μ—΄μ—μ„œμ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 숫자λ₯Ό 인덱슀(Index)라고 ν•œλ‹€. πŸ“™ 2. λ°°μ—΄ μ„ μ–Έ & 생성 & μ΄ˆκΈ°ν™” πŸ“Œ 1. λ°°μ—΄ μ„ μ–Έ 배열을 μ„ μ–Έν•˜λŠ” 방법은 μ›ν•˜λŠ” νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  λ³€μˆ˜ λ˜λŠ” νƒ€μž…μ— λ°°μ—΄μž„μ„ μ˜λ―Έν•˜λŠ” λŒ€κ΄„ν˜Έλ₯Ό 뢙이면 λœλ‹€. public static void main(String[] args) { int[] numbers; String[] names; } πŸ“Œ 2. λ°°μ—΄ 생성 배열을 μ„ μ–Έν•œ λ‹€μŒμ—λŠ” 배열을 생성해야 ν•œλ‹€. 배열을 μ„ μ–Έν•˜λŠ” 것은 단지 μƒμ„±λœ 배열을 닀루기 μœ„ν•œ μ°Έμ‘°λ³€μˆ˜λ₯Ό μœ„ν•œ 곡간이 λ§Œλ“€μ–΄μ§ˆ 뿐이고, 배열을 생성해..

    μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree)

    1. κ°œλ… πŸ›« μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree)λž€ μ—¬λŸ¬ 개의 데이터가 μ‘΄μž¬ν•  λ•Œ νŠΉμ • κ΅¬κ°„μ˜ 합을 κ΅¬ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. 트리 μ’…λ₯˜ 쀑 ν•˜λ‚˜λ‘œ μ΄μ§„νŠΈλ¦¬μ˜ ν˜•νƒœμ΄λ©°, νŠΉμ • κ΅¬κ°„μ˜ 합을 κ°€μž₯ λΉ λ₯΄κ²Œ ꡬ할 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. O(log N) 2. λ™μž‘λ°©μ‹ 🚁 μ„Έκ·Έλ¨ΌνŠΈ 트리λ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  'ꡬ간 ν•© 트리'λ₯Ό 생성해야 ν•œλ‹€. 그리고 'ꡬ간 합을 κ΅¬ν•˜λŠ” ν•¨μˆ˜'와 'μ›μ†Œλ₯Ό μˆ˜μ •ν•˜λŠ” ν•¨μˆ˜'λ₯Ό μ΄μš©ν•˜μ—¬ ꡬ간 합을 κ΅¬ν•˜κ³  νŠΉμ • μ›μ†Œλ₯Ό μˆ˜μ •ν•  수 μžˆλ‹€. '1 9 3 8 4 5 5 9 10 3 4 5'λΌλŠ” 12개의 μ›μ†Œλ₯Ό 가진 배열이 μ£Όμ–΄μ‘Œμ„ λ•Œ μ„Έκ·Έλ¨ΌνŠΈ 트리λ₯Ό μ΄μš©ν•˜μ—¬ ꡬ간 합을 κ΅¬ν•΄λ³΄μž. 1. ꡬ간 ν•© 트리 μƒμ„±ν•˜κΈ° 'ꡬ간'은 μ›λž˜ 데이터 λ²”μœ„λ₯Ό λ°˜μ”© λΆ„ν• ν•˜λŠ” κ²ƒμœΌλ‘œ μ„€μ •ν•œλ‹€. μ΅œμƒλ‹¨ λ…Έλ“œ..

    μΉ΄μš΄νŒ… μ •λ ¬ (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번 κ³Όμ •..

    [자료ꡬ쑰] νž™(Heap)

    1. μ •μ˜ 🐳 νž™(Heap)μ΄λž€ μ—¬λŸ¬ κ°’λ“€ 쀑 μ΅œλŒ“κ°’ ν˜Ήμ€ μ΅œμ†Ÿκ°’μ„ λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚΄κΈ° μœ„ν•œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. νž™μ˜ νŠΉμ§• μ™„μ „ μ΄μ§„νŠΈλ¦¬μ˜ 일쒅이닀. λ°˜μ •λ ¬ μƒνƒœμ΄λ‹€. μ΅œλŒ€νž™(Max Heap) λ˜λŠ” μ΅œμ†Œνž™(Min Heap)에 λ”°λΌμ„œ 루트 λ…Έλ“œκ°€ 항상 κ°€μž₯ 큰 κ°’μ΄κ±°λ‚˜ κ°€μž₯ μž‘μ€ 값을 μœ μ§€ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ€‘λ³΅λœ 값을 ν—ˆμš©ν•œλ‹€. νž™μ˜ μ’…λ₯˜ μ΅œλŒ€ νž™ (Max Heap) λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 ν¬κ±°λ‚˜ 같은 μ™„μ „ μ΄μ§„νŠΈλ¦¬ ν˜•μ‹ μ΅œμ†Œ νž™ (Min Heap) λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 μž‘κ±°λ‚˜ 같은 μ™„μ „ μ΄μ§„νŠΈλ¦¬ ν˜•μ‹ 2. λ™μž‘ 방식 🐟 인덱슀 0 1 2 3 4 5 6 7 8 κ°’ - 9 7 6 4 5 1 3 8 Heap은 배열을 톡해 μ‰½κ²Œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. κ·Έ μ΄μœ λŠ” νž™μ΄ μ™„μ „ μ΄μ§„νŠΈλ¦¬μ΄..

    μœ„μƒ μ •λ ¬(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) νšŒμ „κΉŒμ§€ μˆ˜ν–‰ν•˜λ©΄ 정렬이 λ§ˆλ¬΄λ¦¬λœλ‹€. μœ„μ˜ 방식은 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정렬을 ..