๐Ÿ“• ๊ผญ ํ•„์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ

ํƒ์ƒ‰์ด๋ž€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๊ทธ์ค‘์—์„œ DFS์™€ BFS๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋‘๊ฐœ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ๋ ค๋ฉด ์Šคํƒ, ํ, ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“œ ์Šคํƒ

LIFO ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Stack<Integer> s = new Stack<>();

        // ์‚ฝ์ž…(5) - ์‚ฝ์ž…(2) - ์‚ฝ์ž…(3) - ์‚ฝ์ž…(7) - ์‚ญ์ œ() - ์‚ฝ์ž…(1) - ์‚ฝ์ž…(4) - ์‚ญ์ œ()
        s.push(5);
        s.push(2);
        s.push(3);
        s.push(7);
        s.pop();
        s.push(1);
        s.push(4);
        s.pop();
        // ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ
        while (!s.empty()) {
            System.out.println(s.peek());
            s.pop();
        }
    }

}

๐Ÿ“œ ํ

FIFO ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        // ์‚ฝ์ž…(5) - ์‚ฝ์ž…(2) - ์‚ฝ์ž…(3) - ์‚ฝ์ž…(7) - ์‚ญ์ œ() - ์‚ฝ์ž…(1) - ์‚ฝ์ž…(4) - ์‚ญ์ œ()
        q.offer(5);
        q.offer(2);
        q.offer(3);
        q.offer(7);
        q.poll();
        q.offer(1);
        q.offer(4);
        q.poll();
        // ๋จผ์ € ๋“ค์–ด์˜จ ์›์†Œ๋ถ€ํ„ฐ ์ถ”์ถœ
        while (!q.isEmpty()) {
            System.out.println(q.poll());
        }
    }

}

๐Ÿ“œ ์žฌ๊ท€ํ•จ์ˆ˜

์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

import java.util.*;

public class Main { // ๋ฌดํ•œํžˆ ๋‚˜์˜ค๋Š” ์žฌ๊ท€ํ•จ์ˆ˜

    public static void recursiveFunction() {
        System.out.println("์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.");
        recursiveFunction();
    }

    public static void main(String[] args) {
        recursiveFunction();
    }

}

๐Ÿ”” ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์กฐ๊ฑด

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋ฌธ์ œ ํ’€์ด์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ์กฐ๊ฑด์„ ๋ช…์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•
import java.util.*;

public class Main {

    public static void recursiveFunction(int i) {
        // 100๋ฒˆ์งธ ํ˜ธ์ถœ์„ ํ–ˆ์„ ๋•Œ ์ข…๋ฃŒ๋˜๋„๋ก ์ข…๋ฃŒ ์กฐ๊ฑด ๋ช…์‹œ
        if (i == 100) return;
        System.out.println(i + "๋ฒˆ์งธ ์žฌ๊ท€ ํ•จ์ˆ˜์—์„œ " + (i + 1) + "๋ฒˆ์งธ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.");
        recursiveFunction(i + 1);
        System.out.println(i + "๋ฒˆ์งธ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.");
    }

    public static void main(String[] args) {
        recursiveFunction(1);
    }

}

๐Ÿ”” ์žฌ๊ท€ ํ•จ์ˆ˜์™€ ์Šคํƒ

์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DFS๊ฐ€ ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.
import java.util.*;

public class Main {

    // ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ n!
    public static int factorialIterative(int n) {
        int result = 1;
        // 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ณฑํ•˜๊ธฐ
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    // ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ n!
    public static int factorialRecursive(int n) {
        // n์ด 1 ์ดํ•˜์ธ ๊ฒฝ์šฐ 1์„ ๋ฐ˜ํ™˜
        if (n <= 1) return 1;
        // n! = n * (n - 1)!๋ฅผ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๊ธฐ
        return n * factorialRecursive(n - 1);
    }

    public static void main(String[] args) {
        // ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ n! ์ถœ๋ ฅ(n = 5)
        System.out.println("๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ˜„:" + factorialIterative(5));
        System.out.println("์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„:" + factorialRecursive(5));
    }

}

๐Ÿ“• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS/BFS

๐Ÿ“œ DFS

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ”” ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

๊ทธ๋ž˜ํ”„๋Š” Node์™€ Edge๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด๋•Œ Node๋ฅผ Vertex๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

  • 2๊ฐœ์˜ Node๊ฐ€ Edge๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด '๋‘ Node๋Š” ์ธ์ ‘ํ•˜๋‹ค'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ '์ธ์ ‘ํ•˜๋‹ค'๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ์ ‘ ํ–‰๋ ฌ
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

๐Ÿ“ ์ธ์ ‘ ํ–‰๋ ฌ

2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

  • ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค.
import java.util.*;

public class Main {

    public static final int INF = 999999999; // ๋ฌดํ•œ ๋น„์šฉ ์„ ์–ธ
    
    // 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„
    public static int[][] graph = {
        {0, 7, 5},
        {7, 0, INF},
        {5, INF, 0}
    };

    public static void main(String[] args) {
        // ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(graph[i][j] + " ");
            }
            System.out.println();
        }
    }

}

๐Ÿ“ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

  • ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋งŒ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๊ฒƒ ๋•Œ๋ฌธ์— ํŠธ๊ฑฑ์ •ํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค.
    • ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
import java.util.*;

class Node {

    private int index;
    private int distance;

    public Node(int index, int distance) {
        this.index = index;
        this.distance = distance;
    }

    public void show() {
        System.out.print("(" + this.index + "," + this.distance + ") ");
    }
}

public class Main {

    // ํ–‰(Row)์ด 3๊ฐœ์ธ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„
    public static ArrayList<ArrayList<Node>> graph = new ArrayList<ArrayList<Node>>();

    public static void main(String[] args) {
        // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
        for (int i = 0; i < 3; i++) {
            graph.add(new ArrayList<Node>());
        }

        // ๋…ธ๋“œ 0์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ (๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
        graph.get(0).add(new Node(1, 7));
        graph.get(0).add(new Node(2, 5));

        // ๋…ธ๋“œ 1์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ (๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
        graph.get(1).add(new Node(0, 7));

        // ๋…ธ๋“œ 2์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ (๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
        graph.get(2).add(new Node(0, 5));

        // ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < graph.get(i).size(); j++) {
                graph.get(i).get(j).show();
            }
            System.out.println();
        }
    }

}

๐Ÿ”” DFS์˜ ์›๋ฆฌ

DFS๋Š” ์ฒซ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์ •ํ•ด์•ผํ•˜๊ณ  ๋ฐฉ๋ฌธ ๊ธฐ์ค€์„ ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์˜ ๋ฐฉ๋ฌธ๊ธฐ์ค€์€ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ ํƒ์ƒ‰ ์ˆœ์„œ๋Š” ์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์ œ๋กœ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ ํƒ์ƒ‰์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„ O(n)์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ์Šคํƒ ํ˜•ํƒœ๋กœ๋„ ๋˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ•˜๋ฉด ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค.

๐Ÿ“ ์ˆœ์„œ

  1. ํƒ์ƒ‰ ์‹œ์ž‘๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  2. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์Šคํƒ์—์„œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค.
  3. 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ: ์Šคํƒ์— ํ•œ ๋ฒˆ ์‚ฝ์ž…๋˜์–ด ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๊ฐ€ ๋‹ค์‹œ ์‚ฝ์ž…๋˜์ง€ ์•Š๊ฒŒ ์ฒดํฌํ•˜๋Š” ๊ฒƒ
import java.util.*;

public class Main {

    public static boolean[] visited = new boolean[9];
    public static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>();

    // DFS ํ•จ์ˆ˜ ์ •์˜
    public static void dfs(int x) {
        // ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        visited[x] = true;
        System.out.print(x + " ");
        // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐฉ๋ฌธ
        for (int i = 0; i < graph.get(x).size(); i++) {
            int y = graph.get(x).get(i);
            if (!visited[y]) dfs(y);
        }
    }

    public static void main(String[] args) {
        // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
        for (int i = 0; i < 9; i++) {
            graph.add(new ArrayList<Integer>());
        }

        // ๋…ธ๋“œ 1์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(1).add(2);
        graph.get(1).add(3);
        graph.get(1).add(8);
        
        // ๋…ธ๋“œ 2์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(2).add(1);
        graph.get(2).add(7);
        
        // ๋…ธ๋“œ 3์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(3).add(1);
        graph.get(3).add(4);
        graph.get(3).add(5);
        
        // ๋…ธ๋“œ 4์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(4).add(3);
        graph.get(4).add(5);
        
        // ๋…ธ๋“œ 5์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(5).add(3);
        graph.get(5).add(4);
        
        // ๋…ธ๋“œ 6์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(6).add(7);
        
        // ๋…ธ๋“œ 7์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(7).add(2);
        graph.get(7).add(6);
        graph.get(7).add(8);
        
        // ๋…ธ๋“œ 8์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(8).add(1);
        graph.get(8).add(7);

        dfs(1);
    }

}

๐Ÿ“œ BFS

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. DFS๋Š” ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ˜๋ฉด BFS๋Š” ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค.

  • ๊ฐ„์„ ์ด ๋ชจ๋‘ ๋™์ผํ•˜๊ณ  ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๋•Œ BFS๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”” BFS ์›๋ฆฌ

  • ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ์—์„œ ๊บผ๋‚ธ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธ์ ‘ํ•˜๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ ์ˆœ์„œ

  1. ํƒ์ƒ‰ ์‹œ์ž‘๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฌ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  3. 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
import java.util.*;

public class Main {

    public static boolean[] visited = new boolean[9];
    public static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>();

    // BFS ํ•จ์ˆ˜ ์ •์˜
    public static void bfs(int start) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        // ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        visited[start] = true;
        // ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while(!q.isEmpty()) {
            // ํ์—์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„ ์ถœ๋ ฅ
            int x = q.poll();
            System.out.print(x + " ");
            // ํ•ด๋‹น ์›์†Œ์™€ ์—ฐ๊ฒฐ๋œ, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์›์†Œ๋“ค์„ ํ์— ์‚ฝ์ž…
            for(int i = 0; i < graph.get(x).size(); i++) {
                int y = graph.get(x).get(i);
                if(!visited[y]) {
                    q.offer(y);
                    visited[y] = true;
                }
            }
        }
    }

    public static void main(String[] args) {
        // ๊ทธ๋ž˜ํ”„ ์ดˆ๊ธฐํ™”
        for (int i = 0; i < 9; i++) {
            graph.add(new ArrayList<Integer>());
        }

        // ๋…ธ๋“œ 1์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(1).add(2);
        graph.get(1).add(3);
        graph.get(1).add(8);
        
        // ๋…ธ๋“œ 2์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(2).add(1);
        graph.get(2).add(7);
        
        // ๋…ธ๋“œ 3์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(3).add(1);
        graph.get(3).add(4);
        graph.get(3).add(5);
        
        // ๋…ธ๋“œ 4์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(4).add(3);
        graph.get(4).add(5);
        
        // ๋…ธ๋“œ 5์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(5).add(3);
        graph.get(5).add(4);
        
        // ๋…ธ๋“œ 6์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(6).add(7);
        
        // ๋…ธ๋“œ 7์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(7).add(2);
        graph.get(7).add(6);
        graph.get(7).add(8);
        
        // ๋…ธ๋“œ 8์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ 
        graph.get(8).add(1);
        graph.get(8).add(7);

        bfs(1);
    }

}

์ฐธ์กฐ

https://velog.io/@sbinha/%EC%8A%A4%ED%83%9D-%ED%81%90
.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kciter&logNo=100199946363
.
https://www.youtube.com/watch?v=RPSVXjcFbvA
.
https://velog.io/@cocoacolar/Algorithm-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%9E%98%ED%94%84Graph
.
https://velog.io/@jg31109/5.-%EC%9D%B4%EC%BD%94%ED%85%8C-BFSDFS-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
.
https://mgyo.tistory.com/194
.
https://niklas-dev.tistory.com/19

profile
ํ˜„์žฌ ๋ธ”๋กœ๊ทธ : https://jasonsong97.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€