• ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํ”„๋กœํ•„์‚ฌ์ง„
    ํ•™ํŽ˜
  • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ
  • ํƒœ๊ทธ
  • ๋ธ”๋กœ๊ทธ ๊ด€๋ฆฌ
  • ๊ธ€ ์ž‘์„ฑ
ํ•™ํŽ˜
  • ํ”„๋กœํ•„์‚ฌ์ง„
    ํ•™ํŽ˜
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (38)
      • Baekjoon Online Judge (30)
        • C++ (30)
      • Data structure & Algorithm (7)
      • Java (1)
        • Java Spring (0)
        • Spring ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•˜๋Š” ๊ฐœ๋…๋“ค (1)
      • Open API (0)
      • ์ผ์ƒ ์ด์•ผ๊ธฐ (0)
  • ๋ฐฉ๋ฌธ์ž ์ˆ˜
    • ์ „์ฒด:
    • ์˜ค๋Š˜:
    • ์–ด์ œ:
  • ์ตœ๊ทผ ๋Œ“๊ธ€
      ๋“ฑ๋ก๋œ ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.
    • ์ตœ๊ทผ ๊ณต์ง€
        ๋“ฑ๋ก๋œ ๊ณต์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
      # Home
      # ๊ณต์ง€์‚ฌํ•ญ
      #
      # ํƒœ๊ทธ
      # ๊ฒ€์ƒ‰๊ฒฐ๊ณผ
      # ๋ฐฉ๋ช…๋ก
      • [์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ•ฉ๋ณ‘์ •๋ ฌ (Merge Sort) (BOJ 2752, C++)
        2024๋…„ 12์›” 13์ผ
        • ํ•™ํŽ˜
        • ์ž‘์„ฑ์ž
        • 2024.12.13.:44

        ๐Ÿ’ก ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort)์ด๋ž€?

        ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort)์€ ๋ถ„ํ•  ์ •๋ณต(divide and conquer) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—์š”. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๋‚˜๋ˆˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฉด์„œ ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ •๋ ฌ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

        ์‰ฝ๊ฒŒ ๋งํ•ด, ์ž‘๊ฒŒ ๋‚˜๋ˆ ์„œ ํ•ด๊ฒฐํ•œ ๋’ค, ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


        โœจ ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ์›๋ฆฌ

        ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋‹ค์Œ ์„ธ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์š”.

        1๏ธโƒฃ ๋ถ„ํ• (Divide)

        ์ •๋ ฌํ•  ๋ฐฐ์—ด์„ ๋‘ ๊ฐœ์˜ ์ž‘์€ ๋ฐฐ์—ด๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
        ์ด ๊ณผ์ •์„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์š”.

        2๏ธโƒฃ ์ •๋ณต(Conquer)

        ๋‚˜๋ˆ ์ง„ ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
        ์—ฌ๊ธฐ์„œ ์ •๋ ฌ์€ ์žฌ๊ท€์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ฐ ๋ฐฐ์—ด์ด ํ•˜๋‚˜์”ฉ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ์š”.

        3๏ธโƒฃ ํ•ฉ๋ณ‘(Merge)

        ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋‘ ๊ฐœ๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.
        ์ด๋•Œ, ๋‘ ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋น„๊ตํ•˜๋ฉฐ ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.


        ๐Ÿ› ๏ธ ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ๋™์ž‘ ๊ณผ์ • (์˜ˆ์ œ)

        ์˜ˆ๋ฅผ ๋“ค์–ด [8, 4, 7, 2, 5, 1, 6, 3] ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค๊ณ  ํ•ด๋ณผ๊ฒŒ์š”.

        1๏ธโƒฃ ๋ถ„ํ•  ๋‹จ๊ณ„

        • ๋ฐฐ์—ด์„ ๊ณ„์† ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
          [8, 4, 7, 2, 5, 1, 6, 3] → [8, 4, 7, 2], [5, 1, 6, 3]
          → [8, 4], [7, 2], [5, 1], [6, 3]
          → [8], [4], [7], [2], [5], [1], [6], [3]

        2๏ธโƒฃ ์ •๋ ฌ ํ›„ ํ•ฉ๋ณ‘ ๋‹จ๊ณ„

        • ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ•ฉ์น˜๋ฉฐ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
          • [8]๊ณผ [4] → [4, 8]
          • [7]๊ณผ [2] → [2, 7]
          • [5]๊ณผ [1] → [1, 5]
          • [6]๊ณผ [3] → [3, 6]

        3๏ธโƒฃ ์ตœ์ข… ์ •๋ ฌ๋œ ๋ฐฐ์—ด ์ƒ์„ฑ

        • ๋‹ค์‹œ ์ •๋ ฌ๋œ ๋ฐฐ์—ด๋“ค์„ ํ•ฉ์นฉ๋‹ˆ๋‹ค.
          • [4, 8]๊ณผ [2, 7] → [2, 4, 7, 8]
          • [1, 5]๊ณผ [3, 6] → [1, 3, 5, 6]
          • [2, 4, 7, 8]๊ณผ [1, 3, 5, 6] → [1, 2, 3, 4, 5, 6, 7, 8]

        ๐Ÿ” ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ํŠน์ง•

        โœ… ์žฅ์ 

        1. ์•ˆ์ • ์ •๋ ฌ: ๋™์ผํ•œ ๊ฐ’์˜ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
        2. ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์•ˆ์ •์ : ์ตœ์„ , ํ‰๊ท , ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ **O(n log n)**์ž…๋‹ˆ๋‹ค.
        3. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

        โŒ ๋‹จ์ 

        1. ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ•„์š”: ์ž„์‹œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์„œ **O(n)**์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        2. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ •๋ ฌ๋ณด๋‹ค ๋А๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

         

        ๋„์›€๋˜๋Š” ๋ฌธ์ œ : https://www.acmicpc.net/problem/2751

         

        ํ•ฉ๋ณ‘์ •๋ ฌ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์งœ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

        #include <iostream>
        using namespace std;
        void mergesort(int ary[], int left, int right);
        int main()
        {
        	int n;
        	cin >> n;
        	int* ary = new int[n];
        	for (int i = 0; i < n; i++)
        	{
        		cin >> ary[i];
        	}
        	mergesort(ary, 0, n - 1);
        	for (int i = 0; i < n; i++)
        		cout << ary[i] << '\n';
        	delete[]ary;
        	return 0;
        }
        void mergesort(int ary[], int left, int right) {
        	if (left >= right) return;
        	int mid = (left + right) / 2;
        	mergesort(ary, left, mid);
        	mergesort(ary, mid + 1, right);
        	int n1 = mid - left + 1;
        	int n2 = right - mid;
        	int* leftArr = new int[n1];
        	int* rightArr = new int[n2];
        	for (int i = 0; i < n1; i++)
        		leftArr[i] = ary[left + i];
        	for (int i = 0; i < n2; i++)
        		rightArr[i] = ary[mid + 1 + i];
        	int i = 0, j = 0, k = left;
        	while (i < n1 && j < n2) {
        		if (leftArr[i] <= rightArr[j])
        			ary[k++] = leftArr[i++];
        		else
        			ary[k++] = rightArr[j++];
        	}
        	while (i < n1)
        		ary[k++] = leftArr[i++];
        	while (j < n2)
        		ary[k++] = rightArr[j++];
        
        	delete[]leftArr;
        	delete[]rightArr;
        }

         

         

        'Data structure & Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

        [์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ€ต์ •๋ ฌ (Quick Sort) (BOJ 2750, C++)  (0) 2024.12.14
        [์ •๋ฆฌ] ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ(๋ฐฑ์ค€ 1920, C++)  (0) 2024.11.23
        [์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฒ„๋ธ”์ •๋ ฌ (Bubble sort)  (0) 2024.11.22
        [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์‚ฝ์ž…์ •๋ ฌ (insertion sort)  (0) 2024.11.21
        [์•Œ๊ณ ๋ฆฌ์ฆ˜] ์„ ํƒ์ •๋ ฌ (selection sort)  (0) 2024.11.20
        ๋‹ค์Œ๊ธ€
        ๋‹ค์Œ ๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.
        ์ด์ „๊ธ€
        ์ด์ „ ๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.
        ๋Œ“๊ธ€
      ์กฐํšŒ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
      ์Šคํ‚จ ์—…๋ฐ์ดํŠธ ์•ˆ๋‚ด
      ํ˜„์žฌ ์ด์šฉํ•˜๊ณ  ๊ณ„์‹  ์Šคํ‚จ์˜ ๋ฒ„์ „๋ณด๋‹ค ๋” ๋†’์€ ์ตœ์‹  ๋ฒ„์ „์ด ๊ฐ์ง€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹ ๋ฒ„์ „ ์Šคํ‚จ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
      ("์•„๋‹ˆ์˜ค" ๋ฅผ ์„ ํƒํ•  ์‹œ 30์ผ ๋™์•ˆ ์ตœ์‹  ๋ฒ„์ „์ด ๊ฐ์ง€๋˜์–ด๋„ ๋ชจ๋‹ฌ ์ฐฝ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
      ๋ชฉ์ฐจ
      ํ‘œ์‹œํ•  ๋ชฉ์ฐจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
        • ์•ˆ๋…•ํ•˜์„ธ์š”
        • ๊ฐ์‚ฌํ•ด์š”
        • ์ž˜์žˆ์–ด์š”

        ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”