https://www.acmicpc.net/problem/17471
17471번: 게리맨더링
선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다.
www.acmicpc.net
위 문제와 유사하다는 생각이 들었다
위 문제는 플로이드-워샬 알고리즘으로 풀었는데 이번에는 DFS/BFS 연습을 위해 다르게 풀어보도록 하겠다
DFS
- 추후 개선해야 할 코드이긴 하나 일단 올림
public class Solution {
static int answer;
static boolean visited[];
public int solution(int n, int[][] computers) {
visited = new boolean[n];
answer = 0;
for (int i = 0; i < n; i++) {
if(!visited[i]){
visited[i] = true;
answer += 1;
DFS(i, computers, n);
}
}
return answer;
}
public static void DFS(int a, int[][] computers, int n){
if(a == n) return;
for (int i = 0; i < n; i++) {
if(a != i && computers[a][i] == 1 && !visited[i]){
visited[i] = true;
DFS(i, computers, n);
}
}
}
동일한 코드를 중복해서 쓴 부분을 고칠 수 있을 것 같은데... 지금은 머리가 안 돌아감
'JAVA > 알고리즘 서브 노트' 카테고리의 다른 글
[Programmers: JAVA] 단어 변환 (1) | 2023.01.27 |
---|---|
[백준 19640: JAVA] 화장실의 규칙 (0) | 2022.11.13 |
[프로그래머스: JAVA] 문자열 압축 (1) | 2022.11.12 |
[백준 14503: JAVA] 로봇 청소기 (0) | 2022.11.12 |
[프로그래머스: JAVA] 양궁대회 (1) | 2022.11.11 |