본문 바로가기
알고리즘/알고리즘 설명

20230718 [Java] 문제풀이

by JayAlex07 2023. 7. 18.

20230718 [Java] 문제풀이

 

 

[백준] 1260 DFS와 BFS

 

예전에 파이썬으로 풀었던 문제를 자바로 풀어보았다

 

DFS와 BFS를 구현하는 것이다

 

여기서 만약에 자식 노드, 즉 다음 정점의 개수가 1개 이상일 경우, 제일 작은 것부터 탐색을 한다

  • 즉 모든 자식 노드들을 오름차순으로 정렬을 해주면 된다
import java.util.*;
public class baekjoon1260 {

    public static void dfs(int[] visited, ArrayList<ArrayList<Integer>> matrix, int start) {

        System.out.print(start + " ");
        visited[start] = 1;

        for (int i = 0; i < matrix.get(start).size(); i++) {
            if (visited[matrix.get(start).get(i)] != 1) {
                dfs(visited, matrix, matrix.get(start).get(i));
            }
        }
    }

    public static void bfs(ArrayList<ArrayList<Integer>> matrix, int start) {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(start);
        int[] visited = new int[matrix.size()];
        visited[start] = 1;

        while (!queue.isEmpty()) {
            int current = queue.poll();
            System.out.printf(current + " ");

            for (int i = 0; i < matrix.get(current).size(); i++) {
                if (visited[matrix.get(current).get(i)] == 0) {
                    visited[matrix.get(current).get(i)] = 1;
                    queue.add(matrix.get(current).get(i));
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = Integer.parseInt(scanner.next());
        int M = Integer.parseInt(scanner.next());
        int V = Integer.parseInt(scanner.next());

        ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();

        for (int i = 0; i < N + 1; i ++) matrix.add(new ArrayList<Integer>());

        for (int i = 0; i < M; i ++) {
            int s = Integer.parseInt(scanner.next());
            int e = Integer.parseInt(scanner.next());

            matrix.get(s).add(e);
            matrix.get(e).add(s);
        }

        for (ArrayList<Integer> arrayList : matrix) Collections.sort(arrayList);


        int[] visited = new int[N + 1];

        dfs(visited, matrix, V);
        System.out.println();
        bfs(matrix, V);

    }
}

 

 

[백준] 2606 바이러스

 

1번의 컴퓨터를 통해서 감염된 컴퓨터의 갯수를 출력하는 것이다

 

DFS로 문제를 풀었고, 1번 제외, 다른 노드들을 순회할 때마다 1을 더해주면 된다

 

import java.util.*;

public class baekjoon2606 {

    static int[] visited;
    static ArrayList<ArrayList<Integer>> matrix;
    static int count = 0;

    public static void dfs(int start) {

        visited[start] = 1;

        for (int i = 0; i < matrix.get(start).size(); i++) {
            if (visited[matrix.get(start).get(i)] == 0) {
                visited[matrix.get(start).get(i)] = 1;
                count += 1;
                dfs(matrix.get(start).get(i));
            }
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int nodes = Integer.parseInt(scanner.next());
        int lines = Integer.parseInt(scanner.next());

        visited = new int[nodes + 1];

        matrix = new ArrayList<>();

        for (int i = 0; i < nodes + 1; i ++) matrix.add(new ArrayList<>());

        for (int i = 0; i < lines; i ++) {
            int s = Integer.parseInt(scanner.next());
            int e = Integer.parseInt(scanner.next());

            matrix.get(s).add(e);
            matrix.get(e).add(s);
        }

        dfs(1);
        System.out.println(count);
    }
}

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

20230720 [Java] 문제풀이  (0) 2023.07.20
20230719 [Java] 문제풀이  (0) 2023.07.19
20230714 [Java] 문제풀이  (0) 2023.07.14
20230711 [Java] 문제풀이  (0) 2023.07.11
20230709 [Java] 문제풀이  (0) 2023.07.09