문제
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 네트워크 >
문제 풀이 (Java)
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
boolean visited[] = new boolean[n];
for (int i = 0; i < n; i++) {
if (!visited[i]) {
answer += 1;
visited[i] = true;
bfs(i, computers, visited);
}
}
return answer;
}
private void bfs(int idx, int[][] computers, boolean[] visited) {
Queue<Integer> queue = new LinkedList<>();
queue.add(idx);
while (!queue.isEmpty()) {
int num = queue.poll();
for (int i = 0; i < computers.length; i++) {
if (num == i) {
continue;
}
if (computers[num][i] == 1 && !visited[i]) {
visited[i] = true;
queue.add(i);
}
}
}
}
}
모든 컴퓨터를 탐색하며 아직 네트워크가 이뤄지지 않은 컴퓨터라면 네트워크 추가, 방문 표시, bfs 함수를 호출한다. 최종 answer을 반환한다.
bfs 함수에서는 Queue에 시작 컴퓨터 번호를 저장한 후 Queue가 빌 때까지 다음 과정을 반복한다.
1. queue poll
2. 현재 컴퓨터에서 연결된 컴퓨터 중 아직 네트워크를 이루지 않은 컴퓨터가 있는지 확인한 후, 있다면 방문 표시 및 queue에 저장한다.

출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'🌞Algorithm > 🔥programmers' 카테고리의 다른 글
| [programmers] 타겟 넘버 (0) | 2026.07.14 |
|---|---|
| [programmers] 게임 맵 최단거리 (0) | 2026.07.13 |
| [programmers] 폰켓몬 (0) | 2026.07.03 |
| [programmers] 미로 탈출 (0) | 2026.07.01 |
| [programmers] 숫자 변환하기 (0) | 2026.06.30 |