프로그래머스 알고리즘 고득점 Kit의 BFS/DFS 문제인 '네트워크'를 자바로 풀어보았다.
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이 문제는 DFS를 이용해서 푸는 문제이다. BFS와 DFS에 대한 좀 더 자세한 설명이나 구현은 아래 글에서 볼 수 있다.
https://programming-diary-ina.tistory.com/30
[백준 1260번/C언어] DFS와 BFS, Queue로 풀이
백준 1260번 문제를 큐(Queue)로 풀어보았습니다. 백준 1260번: https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점
programming-diary-ina.tistory.com
BFS나 DFS는 위 글처럼 Queue를 이용해서 구현하는 경우가 많은데, 이 문제의 경우 그보다 visited 배열로 방문 여부를 확인해 가면서 푸는 게 더 간단했다. 그래서 computer를 하나씩 순회하며, 방문하지 않았던 컴퓨터인 경우 하나의 네트워크의 시작으로 보고 answer, 즉 네트워크의 개수를 기록하는 변수에 하나를 더해준다. 그리고 그 computer에 연결된 모든 computer들에 방문 표시를 해주기 위해 dfs 함수를 호출하게 된다.
dfs 함수에서는 일단 입력받은 현재 computer에 방문표시를 해준 다음 그 computer에 연결된 computer들을 순회하며 방문 표시를 해주면서, 다시 dfs 재귀 함수를 호출하여 연결된 computer들에 연결된 computer들까지 방문 표시를 해주게 된다.
class Solution {
public void dfs(int n, int[][] computers, int cur, boolean[] visited) {
visited[cur] = true;
for (int i = 0; i < n; i++) {
if (!visited[i] && computers[cur][i] == 1) {
dfs(n, computers, i, visited);
}
}
}
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(n, computers, i, visited);
}
}
return answer;
}
}
'기초 공부 (언어 및 알고리즘) > 알고리즘 (Java)' 카테고리의 다른 글
[프로그래머스/Java] 아이템 줍기(BFS/DFS 문제) 풀이 (0) | 2025.03.27 |
---|---|
[프로그래머스/Java] '게임 맵 최단거리'(BFS/DFS 문제) 풀이 (0) | 2025.03.25 |
[프로그래머스/Java] 도둑질(DP 문제) 풀이 (0) | 2025.03.21 |
[프로그래머스/Java] 사칙연산(DP 문제) 풀이 (0) | 2025.03.21 |
[프로그래머스/Java] N으로 표현(DP 문제) 풀이 (0) | 2025.03.20 |