알고리즘 스터디 7월 1주차 문제3 (네트워크)

문제#

  • 링크로 대체

풀이 및 주저리..

BFS 를 연습하고자 풀어본 문제이다. 생각보다 머리속에서 정리가 잘되어서 쉽게 풀 수 있었다. 갈 수 있는 곳의 위치들을 계산하고 하나씩 큐에 넣어가면서 그곳에서 새롭게 갈 수 있는 곳들을 검사해주는 방식으로 네트워크가 몇개 이루어져있는지 구해주었다.

코드

package programmers.school.day03;

import java.util.LinkedList;
import java.util.Queue;

public class Network {
	// 먼저 배열의 값만큼 boolean 배열을 만들어주고 하나씩 값을 넣고
	// 거기에 연결되어있는 배열로 들어가 찾기 (BFS)
	public int solution(int n, int[][] computers) {
		boolean[] isVisted = new boolean[n];
		int answer = 0;
		Queue<Integer> que = new LinkedList<Integer>();

		for (int i = 0; i < n; i++) {
			if (isVisted[i])
				continue;
			isVisted[i] = true;
			que.add(i);
			answer++;
			
			while (!que.isEmpty()) {
				int[] conn = computers[que.poll()];
				for (int j = 0; j < conn.length; j++) {
					if(conn[j] == 1 && !isVisted[j]) {
						isVisted[j] = true;
						que.add(j);
					}
				}
			}
		}
		return answer;
	}
}

기억에 남길 것!

© 2020 JunhoBaik, Built with Gatsby