카테고리 없음
[Java] Lv.3 네트워크
에이디/김우진
2024. 7. 22. 14:29
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
DFS를 활용하여 문제를 풀이했다. 컴퓨터 수 만큼 리스트를 만든다.(해당 컴퓨터와 연결된 다른 컴퓨터를 기록할 리스트)
방문한 적 없는 컴퓨터를 기준으로 DFS를 실행하여 방문한 적 없는 연결된 다른 컴퓨터를 계속 확인한다.
자바 코드
import java.util.*;
class Solution {
private boolean[] visited;
private List<List<Integer>> list;
public int solution(int n, int[][] computers) {
int answer = 0;
visited = new boolean[n];
list = new ArrayList<>();
// 컴퓨터 수 만큼 반복
for(int i = 0; i < n; i++){
// 각 컴퓨터에 연결된 다른 컴퓨터를 기록할 리스트
list.add(new ArrayList<>());
// 자기 자신을 제외한 연결된 컴퓨텨를 리스트에 저장
for(int j = 0; j < computers[i].length; j++){
if(computers[i][j] == 1 && i!=j){
list.get(i).add(j);
}
}
}
// 0번부터 네트워크 확인
for(int i = 0; i < n; i++){
// 방문한 적 없는 경우만 실행
if(!visited[i]){
// 현 컴퓨터를 방문처리
visited[i] = true;
// 연결 컴퓨터 확인
dfs(i);
// 정답 + 1
answer++;
}
}
return answer;
}
public void dfs(int i){
// 컴퓨터에 연결된 다른 컴퓨터 확인
for(int value : list.get(i)){
// 방문 안 된 경우에 방문 처리하고 똑같이 연결 네트워크 확인
if(!visited[value]){
visited[value] = true;
dfs(value);
}
}
}
}