• Home

My Codegate

  • Home

백준 2606 바이러스 자바 문제풀이

2024/01/05 Posted by Codegate Java No Comments
백준 2606 바이러스 자바 문제풀이

문제 링크

문제 내용은 입력으로 그래프 간 간선을 받아서 그래프를 만들어준 후, ‘1번’ 컴퓨터가 바이러스에 걸렸을 경우 같은 그래프에 있는 노드의 갯수를 반환해줘야 하는데, 주의할 점은 1번 노드는 제외한 나머지 감염된 갯수를 가져와야 한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

public class Main {

  static int ans = 0;

  public static void dfs(Map<Integer, ArrayList<Integer>> adjList, int node,
      HashSet<Integer> visited) {
    visited.add(node);
    for (int current : adjList.get(node)) {
      if (!visited.contains(current)) {
        ans++;
        dfs(adjList, current, visited);
      }
    }
  }


  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    br.readLine();
    int count = Integer.parseInt(br.readLine());

    Map<Integer, ArrayList<Integer>> adjList = new HashMap<>();
    for (int i = 0; i < count; i++) {
      int[] split = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
      adjList.putIfAbsent(split[0], new ArrayList<>());
      adjList.putIfAbsent(split[1], new ArrayList<>());
      adjList.get(split[0]).add(split[1]);
      adjList.get(split[1]).add(split[0]);
    }

    HashSet<Integer> visited = new HashSet<>();
    if (adjList.size() > 0) {
      dfs(adjList, 1, visited);
    }
    System.out.println(ans);
  }
}

문제를 풀어보자면 Map 안에 입력받은 내용들을 넣어 그래프 형태를 만들어준 뒤 dfs를 돌려줘야 하는데, 바이러스는 항상 1번 컴퓨터에만 걸리기 때문에 딱 한번만 돌려주면 나머지는 내부에서 계속 반복 호출해주고 끝나는 식으로 돌아가고 끝나게 된다.

dfs 메소드를 보면 일단 현재 node를 visited에 추가해준 후, 해당 노드에서 연결되는 값 차례로 꺼내주면서 다시 호출해서 visited 처리하는 식으로 진행되는데, 위 과정을 진행할 때마다 ans 값이 증가하므로 dfs가 모두 끝나고 나면, 1번 컴퓨터를 제외한 바이러스가 걸린 컴퓨터 갯수를 확인할 수 있다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next