[Algorithm] Sort, DFS & BFS

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฒ„๋ธ”์ •๋ ฌ

๋ฒ„๋ธ” ์ •๋ ฌ์˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)

๋ฒ„๋ธ”์ •๋ ฌ์€ ์‚ฌ์šฉ์•ˆํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ โ†’ ํšจ์œจ์ด ์•ˆ ์ข‹์Œ

๋ฐ˜๋ณต๋ฌธ 2๋ฒˆ ์‚ฌ์šฉ, ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

  • ์•„๋ž˜ ๊ฐ’๋“ค์„ ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€ ? X โ‡’ stableํ•˜์ง€ ์•Š๋‹ค. but ๊ธฐ์ค€์„ ์ •ํ•ด์ฃผ๋ฉด ์ •๋ ฌ ๊ฐ€๋Šฅ

  • ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ ๋ฒ„๋ธ” ์ •๋ ฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
      public static int[] bubbleSort(int[] arr) {
          int n = arr.length;
          for (int i = 0; i < n - 1; i++) {
          // ์™ธ๋ถ€ ๋ฃจํ”„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;
                  }
              }
          }
          return arr;
      }
        
    

์„ ํƒ์ •๋ ฌ

์ฃผ์–ด์ง„ ๋ชฉ๋ก์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ์•„ ์ •๋ ฌ๋œ ๋ถ€๋ถ„๊ณผ ๊ตํ™˜ํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ๋ฒ•

  • ์‹œ๊ฐ„ ๋ณต์žก๋„: ์„ ํƒ ์ •๋ ฌ์€ ํ•ญ์ƒ O(n^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ •๋ ฌ ๊ณผ์ •๊ณผ ๊ด€๊ณ„์—†์ด ๋น„๊ต ํšŸ์ˆ˜๋Š” ๋™์ผ , ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)
  • stableํ•˜์ง€ ์•Š๋‹ค.

  • ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ ์„ ํƒ์ •๋ ฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      public static int[] selectionSort(int[] arr) {
            int n = arr.length;
            for (int i = 0; i < n - 1; i++) {// ์™ธ๋ถ€ ๋ฃจํ”„int minIdx = i;// ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ์ตœ์†Ÿ๊ฐ’ ์ธ๋ฑ์Šค๋กœ ์„ค์ •for (int j = i + 1; j < n; j++) {// ๋‚ด๋ถ€ ๋ฃจํ”„if (arr[j] < arr[minIdx]) {// ํ˜„์žฌ ๊ฐ’์ด ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
                        minIdx = j;// ์ตœ์†Ÿ๊ฐ’ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ
                    }
                }
      // ํ˜„์žฌ ์ธ๋ฑ์Šค์™€ ์ตœ์†Ÿ๊ฐ’ ์ธ๋ฑ์Šค์˜ ๊ฐ’ ๊ตํ™˜int temp = arr[i];
                arr[i] = arr[minIdx];
                arr[minIdx] = temp;
            }
            return arr;
        }
        
    

์‚ฝ์ž…์ •๋ ฌ

์‚ฝ์ž… ์ •๋ ฌ์€ ์ฃผ์–ด์ง„ ๋ชฉ๋ก์—์„œ ๊ฐ ์š”์†Œ๋ฅผ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์•Œ๋งž์€ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ชฉ๋ก์„ ๋‘ ๋ถ€๋ถ„, ์ฆ‰ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„๊ณผ ์•„์ง ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด๋ฅผ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์•Œ๋งž์€ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜์—ฌ ์ „์ฒด ๋ชฉ๋ก์„ ์ •๋ ฌํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰

  • ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ผ ์ˆ˜๋ก ํšจ์œจ์ด ์ข‹์•„์ง„๋‹ค.
  • ์ˆœํšŒ๋ณด๋‹ค ๋น„๊ต๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์ด๋ผ๊ณ ๋„ ํ•จ.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋Ÿฌํ”„ํ•˜๊ฒŒ ์ •๋ ฌํ•˜๊ณ  ์‚ฝ์ž…์ •๋ ฌ ํ•˜๋ฉด ์ข‹๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ์˜ ์›๋ฆฌ

  1. ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
  2. ๊ทธ ๋‹ค์Œ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์„ ํƒ
  3. ์ด์ œ ์„ ํƒํ•œ ์š”์†Œ๋ฅผ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์—์„œ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…, ์‚ฝ์ž… ์œ„์น˜๋Š” ์ •๋ ฌ๋œ ๋ถ€๋ถ„์˜ ์š”์†Œ์™€ ๋น„๊ตํ•˜์—ฌ ๊ฒฐ์ •๋œ๋‹ค.
  4. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์„ ์ ์ง„์ ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค.
  5. ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๊ณ„์† ๋ฐ˜๋ณต

  • ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ ์‚ฝ์ž…์ •๋ ฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      public static void insertionSort(int[] arr) {
          int n = arr.length;
          for (int i = 1; i < n; i++) {// ์™ธ๋ถ€ ๋ฃจํ”„int current_value = arr[i];// ํ˜„์žฌ ์š”์†Œ ์„ ํƒint j = i - 1;
              while (j >= 0 && arr[j] > current_value) {// ๋‚ด๋ถ€ ๋ฃจํ”„
                  arr[j + 1] = arr[j];// ์ด์ „ ์š”์†Œ๋ฅผ ํ˜„์žฌ ์œ„์น˜๋กœ ์ด๋™
                  j--;
              }
              arr[j + 1] = current_value;// ํ˜„์žฌ ์š”์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…
          }
      }
        
    

ํ€ต์ •๋ ฌโœจ

  • ํ€ต ์ •๋ ฌ์€ โ€˜๋ถ„ํ•  ์ •๋ณตโ€™ ์ „๋žต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์šฐ๋ฆฌ๊ฐ€ ์ •๋ ฌํ•˜๋ ค๋Š” ๋ชฉ๋ก์„ ํšจ์œจ์ ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ โ€œ๋น„๊ต ์ •๋ ฌโ€ ๋ฒ”์ฃผ์— ์†ํ•˜๋ฉฐ, ํ‰๊ท ์ ์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ์ˆ˜ํ–‰ ์†๋„๋ฅผ ์ž๋ž‘ํ•˜์—ฌ ๋งŽ์€ ๋ถ„์•ผ์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
  • ํ€ต ์ •๋ ฌ์˜ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n log n)์œผ๋กœ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ด์ง€๋งŒ, ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํ”ผ๋ฒ— ์„ ํƒ ๋ฐฉ๋ฒ•์„ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ๋žœ๋คํ•œ ํ”ผ๋ฒ—์„ ์„ ํƒํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ ํšจ์œจ์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ”ผ๋ฒ—์„ ๋ฌด์—‡์œผ๋กœ ์žก๋А๋ƒ์— ๋”ฐ๋ผ ํšจ์œจ์ด ๊ธˆ์ฆํ•˜๊ฑฐ๋‚˜ ๊ธ‰๊ฐํ•œ๋‹ค.
    • ํ€ต์ •๋ ฌ ์“ธ๋•Œ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๋๋ณด๋‹ค ๊ฐ€์šด๋ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • ์ •๋ ฌํ•  ์ˆซ์ž์˜ ๊ฐ€์žฅ ๊ฐ€์šด๋ฐ ์ˆซ์ž๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ๊ณ ๋ฅด๋ฉด ์ข‹์Œ
  • ํ€ต ์ •๋ ฌ์€ ๋‚ด๋ถ€ ์ •๋ ฌ, ์™ธ๋ถ€ ์ •๋ ฌ ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ€ต ์ •๋ ฌ์˜ ๋™์ž‘ ์›๋ฆฌ

  1. ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜์˜ ์š”์†Œ๋ฅผ โ€˜ํ”ผ๋ฒ—โ€™์œผ๋กœ ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”ผ๋ฒ—์€ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘์•™ ์š”์†Œ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์„ ํƒ๋œ ํ”ผ๋ฒ—์„ ์ค‘์‹ฌ์œผ๋กœ, ์ž‘์€ ๊ฐ’์„ ํ”ผ๋ฒ—์˜ ์™ผ์ชฝ์—, ํฐ ๊ฐ’์„ ํ”ผ๋ฒ—์˜ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ โ†’ ์ด ๋‹จ๊ณ„๋ฅผ ๋ฆฌ์ŠคํŠธ์˜ โ€˜๋ถ„ํ• โ€™์ด๋ผ๊ณ  ํ•œ๋‹ค.
  3. ์ด๋ ‡๊ฒŒ ๋ถ„ํ• ๋œ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๊ฐ™์€ ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰. ์ฆ‰, ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์—์„œ ๋‹ค์‹œ ํ”ผ๋ฒ—์„ ์„ ์ •ํ•˜๊ณ  ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 1 ์ดํ•˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ํฌ๊ธฐ๊ฐ€ 1 ์ดํ•˜์ธ ๋ฆฌ์ŠคํŠธ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ„์ฃผ
  5. ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋˜๋ฉด, ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ „์ฒด ์ •๋ ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์™„์„ฑํ•œ๋‹ค.
  • ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ ํ€ต ์ •๋ ฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
      public static List<Integer> quickSort(List<Integer> arr) {
          if (arr.size() <= 1) {// ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด: ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜๋ฉด ์ข…๋ฃŒreturn arr;
          }
        
          int pivot = arr.get(arr.size() / 2);// ํ”ผ๋ฒ— ์„ ํƒ
          List<Integer> left = new ArrayList<>();
          List<Integer> equal = new ArrayList<>();
          List<Integer> right = new ArrayList<>();
        
          for (int num : arr) {
              if (num < pivot) {
                  left.add(num);
              } else if (num > pivot) {
                  right.add(num);
              } else {
                  equal.add(num);
              }
          }
        
          List<Integer> sortedLeft = quickSort(left);
          List<Integer> sortedRight = quickSort(right);
        
          sortedLeft.addAll(equal);
          sortedLeft.addAll(sortedRight);
        
          return sortedLeft;
      }
        
    

๋ณ‘ํ•ฉ์ •๋ ฌ

  • ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ ๋’ค, ์ด๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ด ๊ณผ์ •์—์„œ๋Š” โ€˜๋ถ„ํ• (Divide)โ€™๊ณผ โ€˜๋ณ‘ํ•ฉ(Merge)โ€™ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋“ค์„ ์ˆœํ™˜์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•ด๋‚˜๊ฐ

๋ณ‘ํ•ฉ ์ •๋ ฌ์˜ ๋™์ž‘ ์›๋ฆฌ

  1. ๋ถ„ํ• (Divide): ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด ๋ถ„ํ•  ๊ณผ์ •์€ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 1 ์ดํ•˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ๋ถ„ํ•  ๋‹จ๊ณ„์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
  2. ์ •๋ณต(Conquer): ๋ถ„ํ• ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ. โ†’ ์ด๋Š” ๊ฐ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์ˆœํ™˜์ ์œผ๋กœ ๋ถ„ํ• ๊ณผ ๋ณ‘ํ•ฉ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์ ์  ์ค„์—ฌ ๋‚˜๊ฐ€๋ฉฐ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ๋ณ‘ํ•ฉ(Merge): ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋“ค์„ ํ•ฉ์ณ ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๋ณ‘ํ•ฉ ๊ณผ์ •์—์„œ๋Š” ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ์ž‘์€ ์š”์†Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

  • ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ ๋ณ‘ํ•ฉ์ •๋ ฌ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
      public static List<Integer> mergeSort(List<Integer> arr) {
          if (arr.size() <= 1) {// ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด: ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1 ์ดํ•˜๋ฉด ์ข…๋ฃŒreturn arr;
          }
        
          int mid = arr.size() / 2;// ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋ถ„ํ• 
          List<Integer> left = new ArrayList<>(arr.subList(0, mid));
          List<Integer> right = new ArrayList<>(arr.subList(mid, arr.size()));
        
          left = mergeSort(left);// ์™ผ์ชฝ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ
          right = mergeSort(right);// ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌreturn merge(left, right);// ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ
      }
        
      public static List<Integer> merge(List<Integer> left, List<Integer> right) {
          List<Integer> merged = new ArrayList<>();
          int leftIdx = 0;
          int rightIdx = 0;
        
      // ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ์ž‘์€ ์š”์†Œ๋ฅผ ๋ณ‘ํ•ฉwhile (leftIdx < left.size() && rightIdx < right.size()) {
              if (left.get(leftIdx) < right.get(rightIdx)) {
                  merged.add(left.get(leftIdx));
                  leftIdx++;
              } else {
                  merged.add(right.get(rightIdx));
                  rightIdx++;
              }
          }
        
      // ๋‚จ์€ ์š”์†Œ๋“ค์„ ๋ณ‘ํ•ฉwhile (leftIdx < left.size()) {
              merged.add(left.get(leftIdx));
              leftIdx++;
          }
        
          while (rightIdx < right.size()) {
              merged.add(right.get(rightIdx));
              rightIdx++;
          }
        
          return merged;
      }
        
    

DFS ์™€ BFS

๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋Š” ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์ด ์‚ฌ์šฉ๋œ๋‹ค.

๋„“์ด ์šฐ์„  ํƒ์ƒ‰์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์„ ๋จผ์ € ๊ฐ„๋‹ค.

DFS์™€ BFS ๋ชจ๋‘ ์ง€๋‚˜์˜จ ๊ธธ์€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค - ๊ธฐ๋ก ํ•„์š”, ๊ฐ”๋‹ค ์˜จ ๊ธธ์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

DFS (Depth First Search, DFS)

  • ์‹œ์ž‘ ์ •์ ์—์„œ๋ถ€ํ„ฐ ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™์ด ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ณ  ๋” ์ด์ƒ ํƒ์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅ ํ•  ๋•Œ ์ด์ „ ๋‹จ๊ณ„๋กœ ๋Œ์•„์™€ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ฆ‰, ํ•œ ๋ถ„๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•œ๋‹ค.
  • DFS์—์„œ๋Š” ๊นŠ์ด๊ฐ€ ์—†์œผ๋ฉด ์•ž์— ๊ฒƒ์„ ๋‹ค์‹œ ์„ ํƒํ•ด์•ผํ•˜๋ฏ€๋กœ Backtracking์„ ์‚ฌ์šฉํ•œ๋‹ค
  • DFS๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์žฌ๊ท€ ๋˜๋Š” Stack์„ ์‚ฌ์šฉ

์žฌ๊ท€๋Š” ๋ฌด์กฐ๊ฑด ํƒˆ์ถœ ์กฐ๊ฑด์ด ์žˆ์–ด์•ผ ํ•จ.

์—ฌ๊ธฐ์„œ๋Š” if(์‹œ์ž‘ ์ •์ ๊ณผ ๋„์ฐฉ ์ •์ ์ด ๊ฐ™๋‹ค๋ฉด)์ด ํƒˆ์ถœ๊ตฌ

์žฌ๊ท€๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—„์ฒญ๋‚˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค. = ์‹ค๋ฌด์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ ์ƒ๊ฒจ์„œ ์ ˆ๋Œ€ ์“ฐ๋ฉด ์•ˆ๋จ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ๋งŒ ํ’€๊ธฐ

์žฌ๊ท€์  ์ ‘๊ทผ ๋ฐฉ๋ฒ•

DFS๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ๋ฐฉ๋ฌธํ•œ ์ •์ ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ํ˜„์žฌ ์ •์ ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ดˆ ์‹คํ–‰์‹œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ root(์ตœ์ƒ์œ„ ๋…ธ๋“œ)๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•ด๋‹น ํ˜„์žฌ ์ •์ ์˜ ๋ฐฉ๋ฌธ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. (๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ๊ธฐ ๋ณ€๊ฒฝ)
  4. ํ˜„์žฌ ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์ ‘ํ•œ ์ •์  ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ •์ ์„ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œํ•˜๊ณ  2~5๋ฒˆ ๊ณผ์ •์„ ์žฌ๊ท€ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น ์ •์ ์„ ํ˜„์žฌ ์ •์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ 2~5 ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต

BFS

  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์€ ํ•œ ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ธ์ ‘ํ•œ ๋ชจ๋“  ์ •์ ๋“ค์„ ๋ฐฉ๋ฌธํ•œ ํ›„, ๋ฐฉ๋ฌธํ•œ ์ •์ ์„ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ด์™€ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์˜ ํƒ์ƒ‰
  • ์ฃผ๋กœ ํ(Queue)๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„
    1. ๋™์ž‘ ์›๋ฆฌ
    1. ์‹œ์ž‘ ์ •์ ์„ ํ์— ๋„ฃ๊ณ , ํ•ด๋‹น ์ •์ ์„ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ
    2. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์˜ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.
      • ํ์—์„œ ํ•˜๋‚˜์˜ ์ •์ ์„ ๊ฐ€์ ธ์™€ ํ˜„์žฌ ์ •์ ์œผ๋กœ ์„ค์ •
      • ํ˜„์žฌ ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ๋ชจ๋“  ์ •์ ๋“ค์„ ๊ฒ€ํ† 
      • ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ํ•œ ์ •์ ๋“ค์„ ๋ชจ๋‘ ํ์— ๋„ฃ๊ณ , ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ
      • (๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๊ฐ”๋‹ค์˜จ ๊ธธ์„ true๋กœ ์ฒดํฌํ•˜๊ณ  false์ผ ๋•Œ๋งŒ ์ด๋™)
    3. ํ๊ฐ€ ๋น„์—ˆ์„ ๋•Œ ํƒ์ƒ‰์„ ์ข…๋ฃŒ

BFS๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  1. ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์—์„œ DFS๋‚˜ BFS ์ค‘ ์–ด๋А ๊ฒƒ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  2. ์ฃผ์š” ๋ชฉํ‘œ๊ฐ€ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ๋‘˜ ์ค‘์—์„œ ํŽธํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.
  3. ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฌธ์ œ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฏธ๋กœ ์ฐพ๊ธฐ์™€ ๊ฐ™์ด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” BFS๊ฐ€ ์œ ์šฉ.
    • DFS๋กœ ๊ฒฝ๋กœ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๊ฒฝ์šฐ ์ฒ˜์Œ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜๋Š” ํ•ด๊ฒฐ์ฑ…์ด ๋ฐ˜๋“œ์‹œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ผ๋Š” ๋ณด์žฅ์ด ์—†์Œ.
    • ๊ทธ๋Ÿฌ๋‚˜ BFS๋Š” ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ˜์Œ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜๋Š” ํ•ด๊ฒฐ์ฑ…์ด ๋ฐ”๋กœ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค.
  4. ๊ฒ€์ƒ‰ ๋Œ€์ƒ์ด ํฌ์ง€ ์•Š๊ณ , ๊ฒ€์ƒ‰์˜ ์‹œ์ž‘์ ์—์„œ ์›ํ•˜๋Š” ๋Œ€์ƒ์ด ๋ฉ€์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๊ฐ€ ๋ฌดํ•œํžˆ ์ด์–ด์ง€๋”๋ผ๋„ BFS๋Š” ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๊ฒ€ํ† ํ•˜๋ฏ€๋กœย ๋ฐ˜๋“œ์‹œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

BFSย ํ™œ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

  1. ๊ทธ๋ž˜ํ”„์˜ ํฌ๊ธฐ์™€ ๋ฐ€๋„์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์ง„๋‹ค.
    • ๊ทธ๋ž˜ํ”„์˜ ํฌ๊ธฐ๋‚˜ ๋ฐ€๋„๊ฐ€ ์ปค์งˆ์ˆ˜๋ก, ์ฆ‰ ์ •์ ์ด๋‚˜ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก BFS์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค์„ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๋‹ค.
    • BFS๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค์„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ž˜ํ”„์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก, ํ์— ์ €์žฅ๋˜๋Š” ์ •์ ์˜ ์ˆ˜๋„ ๋Š˜์–ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ปค์ง„๋‹ค. ์ด ๊ฒฝ์šฐ, BFS๋ณด๋‹ค๋Š” DFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง
  3. BFS๋Š” ์‹œ์ž‘์ ์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ •์ ๋“ค๋งŒ ํƒ์ƒ‰
    • BFS๋Š” ์‹œ์ž‘์ ์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ •์ ์€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์ž‘์ ์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ •์ ๋“ค๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  4. BFS๋Š” โ€˜๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐโ€™๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • BFS์—์„œ๋Š” ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š” โ†’ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
     * BFS ์ธ์ ‘ํ–‰๋ ฌ : ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•œ ํ…œํ”Œ๋ฆฟ ์˜ˆ์ œ
     *
     * @param array : ๊ฐ ์ •์ ์„ ํ–‰/์—ด๋กœ ํ•˜๊ณ , ์—ฐ๊ฒฐ๋œ ์ •์ ์€ 1๋กœ, ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ •์ ์€ 0์œผ๋กœ ํ‘œ๊ธฐํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด
     * @param visited : ๋ฐฉ๋ฌธ์—ฌ๋ถ€ ํ™•์ธ์„ ์œ„ํ•œ ๋ฐฐ์—ด
     * @param src : ๋ฐฉ๋ฌธํ•  ์ •์ 
     * @param result : ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ •์  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•œ List
     *
     **/public ArrayList<Integer> bfs_array(int[][] array, boolean[] visited, int src, ArrayList<Integer> result) {
//bfs์˜ ๊ฒฝ์šฐ ํ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
	    Queue<Integer> queue = new LinkedList<>();
//์‹œ์ž‘ ์ง€์ ์„ ํ์— ๋„ฃ์–ด์ฃผ๊ณ , ํ•ด๋‹น ๋ฒ„ํƒ์Šค์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
	    queue.offer(src);
	    visited[src] = true;
//ํ์— ๋”์ด์ƒ ๋ฐฉ๋ฌธํ•  ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.while (!queue.isEmpty()) {
//ํ˜„์žฌ ์œ„์น˜๋ฅผ ํ์—์„œ ๊บผ๋‚ธ ํ›„int cur = queue.poll();
// ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ์ •์ ์„ result์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
				result.add(cur);
//์ „์ฒด ๋ฐฐ์—ด์—์„œ ํ˜„์žฌ ๋ฒ„ํƒ์Šค์˜ ํ–‰๋งŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.for (int i = 0; i < array[cur].length; i++) {
//๊ธธ์ด ์กด์žฌํ•˜๊ณ , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐif(adjArray[cur][i] == 1 && !visited[i]) {
//ํ์— ํ•ด๋‹น ๋ฒ„ํƒ์Šค์˜ ์œ„์น˜๋ฅผ ๋„ฃ์–ด์ค€ ์ดํ›„
	          queue.offer(i);
//๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
	          visited[i] = true;
	        }
	      }
	    }
//์ด์–ด์ง„ ๋ชจ๋“  ๊ธธ์„ ์ˆœํšŒํ•œ ํ›„ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๊ฐ€ ๋‹ด๊ธด ArrayList๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.return result;
  }

Algorithm ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment