์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ : 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N^2)์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ O(NlogN)์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง๋ฌด ์–ธ์–ด๋กœ ๋ชจ๋“ˆ ์—†์ด ๊ตฌํ˜„ํ• ์ˆ˜ ์žˆ๋Š”๊ฐ€?
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„ N^2, NlogN์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ๊ฐ ๋ฒ„๋ธ” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ€ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
    • ๋ฒ„๋ธ” ์ •๋ ฌ์€ ๊ฐ ์ˆœํšŒ์—์„œ ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ๋ฐฐ์—ด ๋์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ณ , ์ธ์ ‘ ์š”์†Œ๋ฅผ ๊ณ„์† ๋น„๊ต ๋ฐ ์Šค์™‘ํ•œ๋‹ค.
    • ํ€ต ์ •๋ ฌ์€ ๋ถ„ํ•  ์ •๋ณต ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค. ๊ธฐ์ค€์ (ํ”ผ๋ด‡)์„ ์„ ํƒํ•˜๊ณ  ์ด ๊ธฐ์ค€์  ๋Œ€๋น„ ์ž‘์€ ์š”์†Œ์™€ ํฐ ์š”์†Œ๋ฅผ ์ขŒ์šฐ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๊ฐ ๋ถ€๋ถ„์„ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. - ๋ฒ„๋ธ” ์ •๋ ฌ ๊ตฌํ˜„
      	public class BubleSort {
      		void bubleSort(int arr[]) {
      			int n = arr.length;
      			// ํ•ต์‹ฌ์ ์ธ N^2 ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ด์ค‘ ๋ฃจํ”„์—์„œ ๋ฐœ์ƒํ•œ๋‹ค. 
      			for (int i = 0; i < n - 1; i++) {
      				for (int j = 0; j < n - 1; j++) {
      					if (arr[j] > arr[j + 1]) {
      						int temp = arr[j];
      						arr[j] = arr[j+1];
      						arr[j+1] = temp;
      					}
      				}
      			}
      		}
      
      		void printArray(int arr[]) {
      			for (int i = 0; i < arr.length; i++)
      				System.out.print(arr[i] + " ");
      			System.out.println();
      		}
      
      		public static void main(String args[]) {
      			BubleSort ob = new BubbleSort();
      			int arr[] = {64, 34, 25, 12, 22, 11, 90};
      			ob.bubbleSort(arr);
      			System.out.println("Sorted array");
      			ob.printArray(arr);
      		}
      	}
    • ํ€ต ์ •๋ ฌ ๊ตฌํ˜„
      	  public class QuickSort {
      		  int partition(int arr[], int low, int high) {
      			  int pivot = arr[high];
      			  int i = low - 1;
      			  for (int j = low; j < high; j++) {
      				  if (arr[j] <= pivot) {
      					  i++;
      					  int temp = arr[i];
      					  arr[i] = arr[j];
      					  arr[j] = temp;
      				  }
      			  }
      			  int temp = arr[i+1];
      			  arr[i + 1] = arr[high];
      			  arr[high] = temp;
      			  
      			  return i + 1;
      		  }
      		  
      		  void sort(int arr[], int low, int high) {
      			  if (low < high) {
      				  int pi = partition(arr, low, high);
      				  sort(arr, low, pi - 1);
      				  sort(arr, pi + 1, high);
      			  }
      		  }
      		  
      		  static void printArray(int arr[]) {
      			int n = arr.length;
      			for (int i = 0; i < n; ++i)
      				System.out.print(arr[i] + " ");
      			System.out.println();
      		  }
      		  
      		  public static void main(String args[]) {
      			  int arr[] = {10, 7, 8, 9, 1, 5};
      			  int n = arr.length;
      			  
      			  QuickSort ob = new QuickSort();
      			  ob.sort(arr, 0, n - 1);
      			  
      			  System.out.println("sorted array");
      			  printArray(arr);
      		  }
      	  }
  • ๊ฐ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ Best์™€ Worst case ์‹œ๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์•Œ๊ณ , ๊ฐ ํŠน์„ฑ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. 20240502100628
    • ๋ฒ„๋ธ” ์ •๋ ฌ
      • ํŠน์„ฑ :
        • ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ•
        • ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ ์‚ฌ์ด ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋ฉฐ, ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ •๋ ฌ ์‹œ ํšจ๊ณผ์ ์ด๋ผ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ •๋ ฌ์— ๋น„ํ•ด ๋น„ํšจ์œจ์ ์ด๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N)
        • ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ, ๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ตœ๊ณ ์˜ ์†๋„๋ฅผ ๋‚ธ๋‹ค.
        • ์ด ๋•Œ๋Š” ๋‚ด๋ถ€ ๋ฃจํ”„์—์„œ ์Šค์™‘์ด ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฐ ์š”์†Œ๋Š” ํ•œ ๋ฒˆ์”ฉ๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
        • ์ด๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ˆซ์ž ๋ณ€ํ™”๊ฐ€ ๋˜์–ด ์žˆ๋‹ค! ๊ฐ€ ์•„๋‹ˆ๋ผ ์ •ํ™•ํ•˜๊ฒŒ flag๋ฅผ ํ†ตํ•ด ๋ณ€ํ™” ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ธฐ๋ฏน์„ ๋„ฃ์—ˆ์„ ๋•Œ์— ํ•ด๋‹นํ•œ๋‹ค.
        public class OptimizedBubbleSort {
        	void bubbleSort(int arr[]) {
        		int n = arr.length;
        		boolean swapped;
        		for (int i = 0; i < n - 1; i++) {
        			swapped = false;
        			for (int j = 0; j < n - i - 1; j++) {
        				if (arr[j] > arr[j + 1]) {
        					int temp = arr[j];
        					arr[j] = arr[j + 1];
        					arr[j + 1] = temp;
        					swapped = true; // swap ๋ฐœ์ƒ ์‹œ ํ”Œ๋ž˜๊ทธ ์„ค์ •
        				}
        			}
        			// ํ•œ๋ฒˆ ํŒจ์Šค์—์„œ ์Šค์™‘์ด ์—†์—ˆ๋‹ค๋ฉด, ๋ฐฐ์—ด์€ ์ด๋ฏธ ์ •๋ ฌ ๋œ๊ฑฐ
        			if (!swapped)
        				break;
        		}
        	}
        	
        	// ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๊ธฐ์กด์˜ ๋ฒ„๋ธ” ์ •๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋„ ๋œ๋‹ค. 
        }
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ๋ฐฐ์—ด์ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
        • ๊ฐ ์š”์†Œ๊ฐ€ ๋‹ค์Œ ์š”์†Œ์™€ ๋ฌด์กฐ๊ฑด ๋น„๊ต ๋ฐ ์Šค์™‘์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ํ€ต์ •๋ ฌ
      • ํŠน์„ฑ
        • ๋ถ„ํ•  ์ •๋ณต ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ๋งŒํผ, ๋†’์€ ํšจ์œจ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
        • ์ „๋ฐ˜์ ์ธ ๋ฉด์—์„œ ๋น ๋ฅธ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์…‹์—์„œ๋„ ํšจ๊ณผ์ ์ด๋‹ค.
        • ํ•˜์ง€๋งŒ ํ”ผ๋ฒ—์˜ ์„ ํƒ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง€๊ณ , ์ตœ์•…์˜ ์ผ€์ด์Šค๋„ ์ƒ๊ธด๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN)
        • ํ€ต ์ •๋ ฌ์€ ๊ฐ ๋ถ„ํ• ์ด ๊ท ๋“ฑํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง„ ๊ฒฝ์šฐ์— ํšจ๊ณผ์ ์ด๋‹ค.
        • ๋งค๋ฒˆ ํ”ผ๋ฒ—์ด ์ค‘์•™๊ฐ’ ๊ทผ์ฒ˜๋กœ ์„ ํƒ๋˜์–ด ์ „์ฒด ๋ฐฐ์—ด์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ํ”ผ๋ฒ—์ด ์ตœ์†Ÿ๊ฐ’์ด๋‚˜ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์„ ํƒ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ถ„ํ•  ๊ณผ์ •์ด ํ•œ ์ชฝ์— ์น˜์šฐ์ณ์ง€๊ณ , ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•˜๋ฏ€๋กœ, ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค.
    • ์„ ํƒ ์ •๋ ฌ
      • ํŠน์„ฑ
        • ๋ฐฐ์—ด ์ „์ฒด์˜ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ์ด๋™ ์‹œํ‚ค๊ณ , ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ž‘์€ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค.
        • ๋งค์šฐ ์ง๊ด€์ ์ด๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์•„ ์งˆ ์ˆ˜๋ก ์„ฑ๋Šฅ์˜ ๊ธ‰๊ฒฉํ•œ ํ•˜๋ฝ์ด ๋ฐœ์ƒํ•œ๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ •๋ ฌ ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌ, ์ตœ์„ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘ ๋™์ผํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ •๋ ฌ ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌ, ์ตœ์„ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘ ๋™์ผํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ์‚ฝ์ž… ์ •๋ ฌ
      • ํŠน์„ฑ
        • ๊ฐ ๋ฐ˜๋ณต์—์„œ ํ•˜๋‚˜์˜ ์ž…๋ ฅ ์š”์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜์—ฌ, ๋ฐฐ์—ด์„ ๋ถ€๋ถ„์ ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
        • ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์„ธํŠธ๋‚˜ ์ •๋ น์ด ์–ด๋Š ์ •๋„ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๋น ๋ฅด๊ณ , ์•ˆ์ •์ ์ด๊ฒŒ ์ •๋ ฌํ•œ๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N)
        • ๋ฐฐ์—ด์ด ์ด๋ฏธ ์ •๋ ฌ ๋˜์–ด ์žˆ์„ ๋•Œ, ์ „์ฒด ๋ฐฐ์—ด์„
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ๋ฐฐ์—ด์ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์„œ, ๊ฐ ์š”์†Œ๋ฅผ ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ ์œ„์น˜๊นŒ์ง€ ์ด๋™์‹œ์ผœ์•ผ ํ•˜์—ฌ์„œ ์ตœ์•…์˜ ์ผ€์ด์Šค์ด๋‹ค.
    • ๋ณ‘ํ•ฉ ์ •๋ ฌ
      • ํŠน์„ฑ
        • ๋ถ„ํ• ์ •๋ณต์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ๋ถ€๋ถ„์„ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
        • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์…‹์— ํšจ๊ณผ์ ์ด๋ฉฐ, ์•ˆ์ •์ ์ด๋‹ค.
        • ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN)
        • ๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๊ณ  ๊ฐ ๋ถ€๋ถ„์„ ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋กœ๊ทธ ์Šค์ผ€์ผ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋‹ค๋ณด๋‹ˆ ์ผ์ •ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์š”ํ•œ๋‹ค .
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN)
        • ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ฐฐ์—ด ์ดˆ๊ธฐ ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ, Best์™€ ๋™์ผํ•˜๊ฒŒ ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ ์Šค์ผ€์ผ์ด ํ•„์š”๋กœ ํ•œ๋‹ค.
    • ํž™ ์ •๋ ฌ
      • ํŠน์„ฑ
        • ํž™ ์ •๋ ฌ์€ ์ด์ง„ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
        • ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํž™์œผ๋กœ ๊ตฌ์„ฑ, ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์š”์†Œ๋กœ ํž™์„ ๋‹ค์‹œ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
        • ์ด๋•Œ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๊ฑฐ์˜ ์—†๊ณ , ์ตœ์•…์—๋„ ์‹œ๊ฐ„๋ณต์žก๋„ ๋กœ๊ทธ ์Šค์ผ€์ผ์„ ์œ ์ง€ํ•œ๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN)
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(NlogN)
    • ์นด์šดํŒ… ์ •๋ ฌ
      • ํŠน์„ฑ
        • ์ •๋ ฌํ•  ์š”์†Œ์˜ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ์ ์ผ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹Œ ๋ฐฉ์‹์ด๋‹ค.
        • ๊ฐ ์ˆซ์ž์˜ ์ถœํ˜„ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ ์ˆซ์ž์˜ ์œ„์น˜๋ฅผ ๋ฐฐ์—ด์— ์ง์ ‘ ๋ฐฐ์น˜ํ•œ๋‹ค.
        • ์ •์ˆ˜๋‚˜ ์ผ์ • ๋ฒ”์œ„์˜ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๋งค์šฐ ๋น ๋ฅด๊ณ  ํšจ๊ณผ์ ์ด๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(n + k) k๋Š” ์ˆซ์ž ๋ฒ”์œ„๋‹ค.
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(n + k)
    • ๊ธฐ์ˆ˜ ์ •๋ ฌ
      • ํŠน์„ฑ
        • ๊ฐ ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ณดํ†ต ์ตœํ•˜์œ„ ์ž๋ฆฟ์ˆ˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ตœ์ƒ์œ„ ์ž๋ฆฌ์ˆ˜๊นŒ์ง€ ์ฐจ๋ก€๋กœ ์ •๋ ฌํ•œ๋‹ค.
        • ์นด์šดํŒ… ์ •๋ ฌ๊ณผ ๊ฐ™์€ ์•ˆ์ •์ ์ธ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
        • ๊ธฐ์ˆ˜ ์ •๋ ฌ์€ ์ˆซ์ž ๋ฒ”์œ„๊ฐ€ ํด ๋•Œ ์นด์šดํŒ… ์ •๋ ฌ ๋ณด๋‹จ ํšจ์œจ์ ์ด๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(n * k)
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(n * k)
    • ๋ฒ„ํ‚ท ์ •๋ ฌ
      • ํŠน์„ฑ
        • ์—ฌ๋Ÿฌ ๋ฒ„ํ‚ท(๋˜๋Š” ๋ฒ„๋ธ”)์„ ๋ถ„๋ฐฐํ•˜๊ณ , ๊ฐ ๋ฒ„ํ‚ท์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
        • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋œ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ž˜ ์ž‘๋™ํ•˜๊ณ , ๋ถ€๋™์†Œ์ˆ˜์  ์ˆ˜๋ฅผ ์ •๋ ฌํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
      • Best Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N + K)
      • Worst Case ์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
        • ๋ฒ„ํ‚ท ๋‚ด์˜ ์š”์†Œ๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜(Longest Increasing Subsequence)
      • ํŠน์„ฑ
        • ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋ฐœ๊ฒฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค
        • ์ด ์ˆ˜์—ด์€ ์—ฐ์†์ ์ผ ํ•„์š”๋Š” ์—†์œผ๋ฉฐ, ์ˆœ์„œ๋งŒ ์œ ์ง€ํ•˜๋ฉด ๋œ๋‹ค.
        • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ : ๊ฐ ์›์†Œ๋ฅผ ๋์œผ๋กœ ํ•˜๋Š” ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹
        • ์ด์ง„ ๊ฒ€์ƒ‰ ๋ฐฉ์‹ : ๊ฐ ์›์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜์—ฌ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
        • LIS ์ž์ฒด๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ•˜๋Š” ๊ณต์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํšจ๊ณผ์ ์œผ๋กœ ์กฐํ•ฉํ•˜๋ฉด ๋ฐฐ์—ด์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์œผ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
        • Best Case : O(N^2)
        • Worst Case : O(N^2)
      • ์ด์ง„ ๊ฒ€์ƒ‰
        • Best Case : O(NlogN)
        • Worst Case : O(NlogN)
  • ์žฌ๊ท€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ๊ทธ ์žฌ๊ท€, ์ผ๊ด„๋กœ ๋ฆฌํ„ด๊ฐ’์„ ๋ฐ›๋Š” ๊ทธ ์žฌ๊ท€๋ฅผ ์ข€๋” ๋ฉ‹์ง€๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ์ข‹์€๊ฐ€?
    • ์žฌ๊ท€๋Š” ์ˆ˜ํ•™์—์„œ๋ถ€ํ„ฐ ๋นŒ๋ ค์˜จ ๊ฐœ๋…์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋ณด๋‹ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฃจํ”„๋ฅผ ๋Œ๊ณ , ๋ชฉ์ ์ด๋‚˜ ์กฐ๊ฑด์— ๊ท€๊ฒฐ๋˜๋Š” ์ƒํ™ฉ์ด ๋˜์—ˆ์„ ๋•Œ ์ž‘์—…์„ ๋ฆฌํ„ดํ•˜๊ณ  ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ์žฌ๊ท€๋Š” ํ˜ธ์ถœ ๋  ๋•Œ๋งˆ๋‹ค ์Šคํƒํ”„๋ ˆ์ž„ ๊ตฌ์กฐ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด, ํ•จ์ˆ˜ ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ๊ฑฐํ‘ธ ๊ตฌํ˜„๋œ๋‹ค.
    • ๋ฐ˜๋ณต์— ๋น„ํ•ด ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌดํ•œ ๋ฃจํ”„ ๋ฐœ์ƒ ์‹œ ์žฌ๊ท€์˜ ๊ฒฝ์šฐ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์ดˆ๋ž˜ํ•˜์—ฌ, ์ผ์ • ๋ฉด์—์„œ ์ข…๋ฃŒ ๋œ๋‹ค๋Š” ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ˜๋ณต์€ ์ด์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํšจ์œจ์ ์ด๋‹ค๋ณด๋‹ˆ ๋ฌดํ•œํ•˜๊ฒŒ ๋ฐ˜๋ณต์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ, ์ธ์ง€ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋ฅด๋ฉฐ, ์‹œ์Šคํ…œ์„ ๊ฐ•์ œ ์ข…๋ฃŒ ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์•ˆ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์  ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๊ณผ ์žฌ๊ท€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.
  • BFS/ DFS์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง๋ฌด ์–ธ์–ด๋กœ ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • BFS(Breadth-First Search) :
      • ํŠน์„ฑ BFS๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ฐจ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ, ์ฃผ๋ณ€๋ถ€๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ™•์ธ, ์ดํ›„ ๋‹ค์Œ ๊นŠ์ด๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
      • ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ณ , ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์‹œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
      • BFS ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋ ˆ๋ฐธ๋ณ„๋กœ ํƒ์ƒ‰์ด ๋˜๋ฏ€๋กœ, ๊ณ„์ธต์  ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์— ์ ํ•ฉํ•˜๋‹ค.
      • ๊ตฌํ˜„ ์˜ˆ์‹œ
      import java.util.*;
      
      public class BFS {
      	private int V;
      	private LinkedList<Integer> adj[];
      	
      	public BFS(int v) {
      		this.V = v;
      		adj = new LinkedList[v];
      		for (int i = 0; i < this.V; ++i) {
      			adj[i] = new LinkedList();
      		}
      	}
      
      	void addEdge(int v, int w) {
      		adj[v].add(w); // ๋…ธ๋“œ v์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ w ์ถ”๊ฐ€
      	}
      
      	void BFS(int s) {
      		boolean visited[] = new boolean[this.V];
      		LinkedList<Integer> queue = new LinkedList<Integer>();
      
      		visited[s] = true;
      		queue.add(s);
      
      		while(queue.size() != 0) {
      			s = queue.poll(); // ์›์†Œ ํ•˜๋‚˜ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜
      			System.out.print(s + " ");
      
      			Iterator<Integer> i = adj[s].listIterator();
      			while (i.hasNext()) {
      				int n = i.next();
      				if (!visited[n]) {
      					visited[n] = true;
      					queue.add(n)
      				}
      			}
      		}
      	}
      
      	public static void main(String args[]) {
              BFS g = new BFS(4);
      
              g.addEdge(0, 1);
              g.addEdge(0, 2);
              g.addEdge(1, 2);
              g.addEdge(2, 0);
              g.addEdge(2, 3);
              g.addEdge(3, 3);
      
              System.out.println("Breadth First Traversal (starting from vertex 2)");
      
              g.BFS(2);
          }
      }
    • DFS(Depth-First Search)
      • ์šฐ์„ ์ ์œผ๋กœ ๋…ธ๋“œ์˜ ๊นŠ์ด๋กœ ๋“ค์–ด๊ฐ€์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์žฌ๊ท€ ํ˜ธ์ถœ ๋“ฑ์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ์‚ฌ์ดํด ๊ฐ์ง€, ๊ฒฝ๋กœ ํƒ์ƒ‰, ๊ทธ๋ž˜ํ”„์˜ ํ›„์œ„ ์ˆœํšŒ ๋“ฑ์— ์œ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
      • ๊ตฌํ˜„
      import java.util.*;
      
      public class DFS {
          private int V;   // ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
          private LinkedList<Integer> adj[]; // ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
      
          DFS(int v) {
              V = v;
              adj = new LinkedList[v];
              for (int i=0; i<v; ++i)
                  adj[i] = new LinkedList();
          }
      
          void addEdge(int v, int w) {
              adj[v].add(w); // v์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ w ์ถ”๊ฐ€
          }
      
          void DFSUtil(int v, boolean visited[]) {
              visited[v] = true;
              System.out.print(v + " ");
      
              Iterator<Integer> i = adj[v].listIterator();
              while (i.hasNext()) {
                  int n = i.next();
                  if (!visited[n])
                      DFSUtil(n, visited);
              }
          }
      
          void DFS(int v) {
              boolean visited[] = new boolean[V];
              DFSUtil(v, visited);
          }
      
          public static void main(String args[]) {
              DFS g = new DFS(4);
      
              g.addEdge(0, 1);
              g.addEdge(0, 2);
              g.addEdge(1, 2);
              g.addEdge(2, 0);
              g.addEdge(2, 3);
              g.addEdge(3, 3);
      
              System.out.println("Depth First Traversal (starting from vertex 2)");
      
              g.DFS(2);
          }
      }
      
  • ๋‹ค์ต์ŠคํŠธ๋ผ, ํ”„๋ฆผ, ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ, ๋ฒจ๋งŒํฌ๋“œ, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€?
    • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๋ชฉ์  : ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰
      • ํŠน์„ฑ : ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์Œ์˜ ๊ฐ€์ค‘์น˜๋ฅด ๊ฐ€์ง„ ๊ฐ„์„ ์ด ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
      • ๋ฐฉ๋ฒ• : ํ˜„์žฌ ์ •์ ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ ์„ ์šฐ์„ ์ ์œผ๋กœ ์„ ํƒํ•˜๊ณ  ํ•ด๋‹น ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
    • ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๋ชฉ์  : ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„์˜ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(Minimum Spanning Tree)๋ฅผ ์ฐพ๋Š”๋‹ค.
      • ํŠน์„ฑ : ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
      • ๋ฐฉ๋ฒ• : ํŠน์ • ์ •์ ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์„ ํƒ๋œ ์ •์  ์ง‘ํ•ฉ์— ์ธ์ ‘ํ•œ ์ •์  ์ค‘ ์ตœ ๊ฐ€์ค‘์น˜์˜ ๊ฐ„์„ ์„ ์„ ํƒํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•œ๋‹ค.
    • ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Kruskalโ€™s Algorithm)
      • ๋ชฉ์  : ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„์˜ MST ๋ฅผ ์ฐพ๋Š”๋‹ค.
      • ํŠน์„ฑ : ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ„์„ญ์„ ๊ฐ€์ค‘์น˜ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค, ์ˆœ์ฐจ์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
      • ๋ฐฉ๋ฒ• : ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ(Union-Find) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์ง€ ์•Š๋Š” ์„ ์—์„œ ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ํ”Œ๋ฃจ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Floyd-Warshall)
      • ๋ชฉ์  : ๋ชจ๋“  ์Œ์˜ ์ •์  ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค.
      • ํŠน์„ฑ : ๊ฐ€์ค‘์น˜ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์–ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ๋ฐฉ๋ฒ• : ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ฐ ์ •์  ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
    • ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Bellman-Ford)
      • ๋ชฉ์  : ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์œผ๋ฉฐ, ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ํŠน์„ฑ : ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜์—ฌ ์Œ์˜ ์ˆœํ™˜์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๋ฐฉ๋ฒ• : ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ„์„ ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ , ์Œ์˜ ์ˆœํ™˜ ์กด์žฌ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ฝ”๋“œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ดํ•ด, ํŠน์ • ์ž…๋ ฅ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์‹คํ–‰๋˜๋Š”์ง€ ์˜ˆ์ธกํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
    1. ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ ์ดํ•ดํ•˜๊ธฐ ์ฝ”๋“œ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ผ์–ด๋‚  ์˜์—ญ์„ ํŒŒ์•…ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ, ์žฌ๊ท€ ํ˜ธ์ถœ, ์กฐ๊ฑด๋ฌธ ๋“ฑ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์—์„œ ์‹คํ–‰์‹œ๊ฐ„์ด ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ์ค€๋‹ค.
    2. ๋ฐ˜๋ณต๋ฌธ ๋ฌธ์„ ๋ฐ˜๋ณต๋ฌธ์ด ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์ผ์–ด๋‚˜๋ฉฐ, ๊ทธ ๋Œ€์ƒ์˜ ๋ฒ”์œ„๊ฐ€ ์–ด๋Š์ •๋„ ๋ ์ง€๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค. ๋ณต์žก๋„๋Š” ๋ฐฐ์—ด ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ O(N)์ด ๋œ๋‹ค.
    3. ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ ํ™•์ธ ์™ธ๋ถ€, ๋‚ด๋ถ€์˜ ๋ฐ˜๋ณต์€ ๊ฐ๊ฐ์˜ ์‹คํ–‰ํšŒ์ˆ˜๋ฅผ ๊ณฑํ•œ ๋งŒํผ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ O(NM)์˜ ๋ณต์žก๋„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด์™ธ๋ถ€๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์ œ๊ณฑ์ด ๋˜๊ณ , ์ค‘์ฒฉ์ด ๋ช‡๋ฒˆ ๋˜๋ƒ์— ๋”ฐ๋ผ ๋” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
    4. ์žฌ๊ท€ ํ•จ์ˆ˜ ๋ถ„์„ ๊ฐ ํ˜ธ์ถœ์—์„œ ์žฌ๊ท€๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆ˜์ค€์„ ์ฒดํฌํ•ด์•ผ ํ•˜๋ฉฐ ๋ณดํ†ต O(NlogN) ๋‚ด์ง€๋Š” O(logN) ์ •๋„์˜ ๋ณต์žก๋„๋ฅผ ์ถ”์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    5. Worst, Average, Best ์ผ€์ด์Šค ๊ณ ๋ ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ญ์ƒ ์ตœ์•…-ํ‰๊ท -์ตœ๋Œ€ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ ์ด๋•Œ, ์„ฑ๋Šฅ์ ์ธ ์ง€ํ‘œ๋Š” ์ตœ์„  ๋‚ด์ง€๋Š” ํ‰๊ท  ๋ณด๋‹จ ์ตœ์•…์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๋ คํ•˜๋ฉด ๋œ๋‹ค.
    6. ์ตœ๋Œ€ ์ฐจ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋ผ ์ „์ฒด ์ฝ”๋“œ์˜ ์–‘์„ ํ†ตํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ์ผ์ข…์˜ ๋ฐฉ์ •์‹ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์„œ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ์— ๊ฐ€๊นŒ์šด ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ๋ฐ˜๋ณต๋ฌธ์ด ๋Œ์•„๊ฐ„๋‹ค๊ณ  ํ•˜๋ฉด ์‹ค์งˆ์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์ฐจ์ˆ˜์˜ ๋ณ€์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„์— ๊ฐ€๊น๊ณ , ๊ทธ ํ•˜์œ„ ๋ณ€๋“ค์€ ์‹ค์งˆ์ ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค(๊ฐ’์˜ ํฌ๊ธฐ ํญ์ด ์ปค์„œ).

      O(N^3 + 4N + 15) ๋ผ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ์‹ค์งˆ์ ์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^3) ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด N์ด 100์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋”๋ผ๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1000000 + 400 + 15) ๋กœ ์‹ค์งˆ์ ์œผ๋กœ O(1000000)์™€ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.