Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 문제풀이
- dynamic programming
- redis
- 파이썬
- boj
- DP
- 스칼라
- Go언어
- Java
- programmers
- codewars
- 프로그래머스
- 알고리즘
- docker
- HBase
- 리눅스
- 자바
- 동적프로그래밍
- Python
- 코드워
- go
- 주키퍼
- gradle
- scala
- golang
- zookeeper
- leetcode
- 튜토리얼
- Linux
- OOM
Archives
- Today
- Total
파이문
[Programmers] 네트워크 DFS 풀이 (Java) 본문
728x90
네트워크
https://programmers.co.kr/learn/courses/30/lessons/43162
DFS 풀이
문제 설명이 길지만, 축약하자면 undirected graph 에서 연결 되지 않은 그룹이 몇개 있는지에 대한 문제다. DFS 로 그래프를 따라 가되, 이미 방문 했던 노드면 패스하고 방문하지 않았던 노드면 다시 계속 따라가게 구현하면 된다.
노드의 방문에 대한 여부는 미방문(0), 누군가가 방문 하고 있는 중 (1), 방문 완료(2) 로 확인할 수 있지만... 문제에선 사실 여기까진 필요없고 단순히 boolean 으로 확인하면 된다. (만약 directed graph 라면 이 알고리즘을 써야 한다. 참고)
class Solution {
public int dfs(int i, int[][] computers, boolean[] visited) {
if (visited[i]) {
return 0;
}
visited[i] = true;
for (int j = 0; j < computers[i].length; j++) {
if (computers[i][j] == 1) {
dfs(j, computers, visited);
}
}
return 1;
}
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 += dfs(i, computers, visited);
}
}
return answer;
}
}
'문제 풀이 > programmers' 카테고리의 다른 글
[Programmers] 주식가격 (Python) (0) | 2021.03.04 |
---|---|
[Programmers] 다리를 지나는 트럭 (Java) (0) | 2021.03.04 |
[Programmers] 전화번호 목록 (Java) (0) | 2020.09.17 |
[Programmers] 단어 변환 DFS 풀이 (Java) (0) | 2020.07.09 |
[Programmers] 타겟 넘버 DFS 풀이, BFS 풀이 (Java) (0) | 2020.07.08 |
Comments