문제
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
문제풀이
이 문제는 쉬워서 그런진 몰라도 DFS문제치고 굉장히 빨리 풀어서 기쁘다,,ㅎㅎ
컴퓨터로 주어지는 배열을 노드로 보고, 노드를 차례차례 방문하여 연결되어 있는 끝까지 가서 방문 여부를 표시하면 되기 때문에 이 문제도 DFS로 구현하면 된다.
처음 0번 노드부터 시작하여 연결된 노드(1표시)를 탐색하여 visted배열에 표시한다 (computers 열의 값 확인)
그리고 끊기면 visited배열 중에서 아직 방문안된(false표시인) 노드부터 다시 dfs를 실행한다.
소스코드
class Solution {
static boolean[] visited;
public int solution(int n, int[][] computers) {
int answer = 0;
visited = new boolean[n]; // 방문받을 배열
for(int i = 0; i < n; i++){
if(visited[i] == false){
dfs(i, computers, n);
answer++;
}
}
return answer;
}
public void dfs(int start, int[][] computers, int n) {
if(visited[start] == true) //이미 방문된 정점이라면
return;
else
visited[start] = true;
for(int i = 0; i < n; i++){ // 시작정점의 연결된 정점을 하나하나 보고
if(i != start && computers[start][i] == 1){ // 자기자신이 아니고 연결되어있으면
dfs(i, computers, n); // 그 연결정점으로 다시 탐색
}
}
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 등굣길 자바 (0) | 2022.01.11 |
---|---|
[프로그래머스] 키패드 누르기(2020카카오 인턴십) 자바 (0) | 2021.11.25 |
[프로그래머스] 타겟 넘버 자바 (0) | 2021.11.18 |
[프로그래머스] 괄호 변환 자바 (0) | 2021.11.07 |
[프로그래머스] 크레인 인형뽑기 게임 자바 (0) | 2021.11.07 |