greenkang
그린 개발log
greenkang
전체 방문자
오늘
어제
  • 분류 전체보기 (28)
    • 알고리즘 (20)
    • MySQL (0)
    • 생각 (0)
    • 컴퓨터구조 (6)
    • Spring · SpringBoot (1)
    • Java (1)
    • 장애 대응 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java
  • 백준 1065번 자바
  • python
  • 장애 대응 회고
  • 어셈블리어
  • 백준 24479번 자바
  • TOPCODER알고리즘트레이닝
  • 백준7569
  • 컴퓨터구조
  • 백준
  • 파이썬
  • 백준7569 java
  • 41. First Missing Positive
  • 프로그래머스 거리두기 java
  • 리트코드
  • 알고리즘
  • 프로그래머스
  • 자바
  • 백준 17265번
  • 프로그래머스 거리두기 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
greenkang

그린 개발log

알고리즘

[백준] 2606번: 바이러스

2022. 7. 4. 22:25

 

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

 


[풀이 방법]

1. 키(정수) : 값(배열)을 갖는 HashMap 자료구조를 사용하여 컴퓨터의 연결을 저장 (그래프)

2. 방문한 노드는 더 이상 방문하지 않아도 되므로 방문기록을 표시 할 boolean 배열 visited를 선언

3. 연결되어 있는 컴퓨터부터 순차적으로 반복(bfs) 하기 위해 다음에 방문 할 노드를 담아 둘 Queue 자료구조 q 사용

 

여기서 부터 bfs 시작 ⤵

 

4. 첫 시작점 1을 방문기록 표시하고 큐에 추가

5. q가 비어질때까지 다음을 반복

    5-1. 컴퓨터를 꺼낸다

    5-2. 연결 된 컴퓨터들 중 방문하지 않은 컴퓨터들을 큐에 추가하고 바이러스에 감염된 컴퓨터 수(cnt)를 증가

           (만약 아무것도 연결되어 있지 않다면 큐에서 다음 컴퓨터를 꺼낸다)

 

6. 바이러스에 감염 된 컴퓨터 수 출력

 

[풀이 코드_Java]

*코드가 왜 밀리는지 모르겠다....😢

import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
import java.util.HashMap;
import java.util.ArrayList;

public class Main {
	
	static int cnt = 0;
	static HashMap<Integer, ArrayList<Integer>> network = new HashMap<>();;
	static boolean[] visited;
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
	    
		// 입력받은 값 각 변수에 저장 
		visited = new boolean[sc.nextInt() + 1];        // 방문기록 
	    int pairCnt = sc.nextInt();                     // 쌍의 개수            
		for (int i = 0; i < pairCnt; i++) {             // 네트워크 연결  
			int c1 = sc.nextInt(), c2 = sc.nextInt();
			
			if (network.get(c1) == null) {
				ArrayList<Integer> arr = new ArrayList<>();
				network.put(c1, arr);
			}
			network.get(c1).add(c2);
			
			if (network.get(c2) == null) {
				ArrayList<Integer> arr = new ArrayList<>();
				network.put(c2, arr);
			}
			network.get(c2).add(c1);
		}
		bfs();
		
		System.out.println(cnt);
	}
	
	public static int bfs() {
		
		Queue<Integer> q = new LinkedList<>();
		visited[1] = true;
		q.add(1);
		
		while(!q.isEmpty()) {
			int cpt = q.poll();
			if(network.get(cpt) == null) continue;
			
			for (Integer nextCpt: network.get(cpt)) {
				if (!visited[nextCpt]) {
					visited[nextCpt] = true;
					cnt++;
					q.add(nextCpt);
				}
			}
			
		}
		
		return cnt;
	}

}

'알고리즘' 카테고리의 다른 글

[백준] 7569번 토마토  (0) 2022.07.17
[백준] 11724번 연결 요소의 개수  (0) 2022.07.12
[백준] 17265번 나의 인생에는 수학과 함께  (0) 2022.06.30
[백준] 2178번 미로탐색  (0) 2022.06.28
[백준] 14500번 테트로미노  (0) 2022.06.22
    '알고리즘' 카테고리의 다른 글
    • [백준] 7569번 토마토
    • [백준] 11724번 연결 요소의 개수
    • [백준] 17265번 나의 인생에는 수학과 함께
    • [백준] 2178번 미로탐색
    greenkang
    greenkang

    티스토리툴바