https://school.programmers.co.kr/learn/courses/30/lessons/43162
class Solution {
int solution(int n, int[][] computers) {
boolean[] visited = new boolean[n];
int answer = 0;
for (int i = 0; i < n; i++) {
if (!visited[i]) {
dfs(i, computers, visited);
answer++;
}
}
return answer;
}
void dfs(int cur, int[][] computers, boolean[] visited) {
visited[cur] = true;
for (int next = 0; next < computers.length; next++) {
if (computers[cur][next] == 1 && !visited[next]) {
dfs(next, computers, visited);
}
}
}
}
재귀호출시, 클래스 변수 VS 매개변수
일반적인 문제 풀이에서는 매개변수로 변수를 넘기는 방식이 선호되며,
n이 수천 이상이거나 재귀 깊이가 매우 깊을 경우( StackOverflowError )만 클래스 변수를 사용하는 것이 좋습니다.
일반적으로 알고리즘 문제 풀이 상황에서는 매개변수로 변수를 넘기는 방식이 더 나은 경우가 많습니다. 이 접근법은 가독성과 재사용성이 뛰어나고, 함수 간의 의존성을 줄여 코드 유지 보수성을 높이는 데 유리합니다.
하지만 일부 경우에는 클래스 변수를 사용하는 것이 더 효율적이거나 코드 작성이 편리할 수 있습니다.
매개변수로 넘기는 방식이 더 나은 이유
- 가독성과 재사용성: 매개변수로 변수를 넘기는 방식은 메서드의 동작이 매개변수에만 의존하기 때문에, 메서드가 더 독립적이고, 테스트하거나 재사용하기 더 쉬워집니다.
- 부작용 방지: 클래스 변수를 사용하면 메서드 간에 상태를 공유하게 되어, 예상치 못한 부작용이 발생할 수 있습니다. 반면 매개변수로 값을 전달하면, 메서드의 부작용을 줄일 수 있습니다.
- 디버깅 용이성: 클래스 변수를 사용하면 코드의 상태 관리가 복잡해질 수 있습니다. 매개변수를 통해 함수 내에서 값의 변화를 추적하면, 디버깅 시 문제가 생겼을 때 원인을 파악하기가 더 쉽습니다.
클래스 변수를 사용하는 것이 나은 경우
- 큰 입력 크기에서의 성능 최적화: 매개변수를 계속 스택에 넘기는 작업은 입력 크기(n)가 매우 클 경우(예: 재귀 깊이가 수천 번 이상 발생)에는 성능 저하를 일으킬 수 있습니다. 이 경우 클래스 변수를 사용하면 스택을 덜 사용하는 효과가 있어 메모리 효율성 측면에서 유리할 수 있습니다.
- 상태를 유지해야 하는 경우: 특정한 문제에서 여러 함수가 동일한 상태를 공유하고 이를 변경해야 하는 상황에서는 클래스 변수를 사용하는 것이 편리합니다. 예를 들어, 백트래킹을 하면서 하나의 상태를 공유해야 하는 경우 클래스 변수를 사용하는 것이 적합할 수 있습니다.
'알고리즘 문제 풀이 > 4. 탐색' 카테고리의 다른 글
DFS + Map (PRO 여행경로) (0) | 2024.07.07 |
---|