출처: 프로그래머스 코딩테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
접근 방식
컴퓨터끼리 연결되어 있는 네트워크의 개수를 구하는 것에서 노드끼리 연결되어 있는 그래프, 즉 연결 그래프의 개수를 구하는 것과 비슷하다고 생각했다. 그래서 연결되어 있는 노드를 하나씩 끝까지 방문처리를 하면서 탐색하고, 다시 방문하지 않은 노드를 방문하는 과정을 반복하는 방법을 생각했다. 노드를 끝까지 탐색한다는 것에서 DFS를 떠올렸다.
풀이
- 방문하지 않은 컴퓨터를 탐색한다.
- 방문한 컴퓨터부터 연결되어 있는 컴퓨터를 하나씩 탐색한다. 방문하면 방문 처리를 한다.
- 더이상 연결된 컴퓨터가 없다면 처음 컴퓨터로 돌아간다.
- 그 다음으로 방문하지 않은 컴퓨터부터 다시 탐색하고, 위 과정을 반복한다.
소스코드
class Solution {
boolean[] visited;
public int solution(int n, int[][] computers) {
int answer = 0; // 네트워크의 개수
visited = new boolean[n]; // 방문처리
// 0번부터 n-1번까지 방문하지 않은 컴퓨터를 탐색
for(int i=0; i<n; i++){
if(!visited[i]){
dfs(i, computers);
answer ++; // 방문이 끝나면 네트워크 개수를 +1
}
}
return answer;
}
public void dfs(int start, int[][] computers){
// 현재 컴퓨터 방문처리
visited[start] = true;
// 현재 컴퓨터 start에 연결되어 있고, 방문하지 않았다면 해당 컴퓨터를 방문
for(int i=0; i<computers.length; i++){
if(computers[start][i] == 1 && !visited[i]){
dfs(i, computers);
}
}
}
}
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 43164번 - 여행경로 (Java) (0) | 2023.06.12 |
---|---|
[프로그래머스] 12985번 - 예상 대진표 (Java) (0) | 2023.06.12 |
[프로그래머스] 12973번 - 짝지어 제거하기 (JAVA) (0) | 2023.06.08 |
[프로그래머스] 12945번 - 피보나치 수 (JAVA) (0) | 2023.06.07 |
[프로그래머스] 12911번 - 다음 큰 숫자 (JAVA) (2) | 2023.06.06 |