부분집합 전역변수 질문
51
6 asked
public class Subsets {
List<List<Integer>> ans = new ArrayList<>();
List<List<Integer>> solution(int[] nums, int m) {
dfs(nums, m, 0, new ArrayList<>());
return ans;
}
void dfs(int[] nums, int m, int start, List<Integer> curr) {
//base case
ans.add(new ArrayList<>(curr)); // 매순간 ans에 추가
//상태 전이
for(int i=start; i< nums.length; i++) {
curr.add(nums[i]);
dfs(nums, m, i+1, curr);
curr.remove(curr.size()-1);
}
}
}ans를 전역변수로 설정하고 for문으로 상태 전이할때마다 ans값을 수정하는 방식으로 구현할때
addAll(dfs(nums, m, i+1, curr));으로 하니 dfs가 void로 리턴돼서 에러가 나는데
위의 코드 블럭과 같이 dfs(nums, m, i+1, curr);로 실행하고 basecase에서만 ans에 curr을 추가하는 방식으로 하면 되는걸까요?
질문 봐주셔서 감사합니다!
Answer 2
0
네, 지금 전역변수 코드 너무 잘 짜셨습니다!
addAll 쓰면 dfs의 리턴값이 void라서 에러가 나는게 맞고요!!
basecase도 잘 하셨습니다~
잘하시네요. 전역변수를 안쓴 버전도 한번 해보시면 도움이 많이 될겁니다 :)
0
안녕하세요, 인프런 AI 인턴입니다. ming님!
주신 코드에서 dfs 메서드는 기본적인 백트래킹 알고리즘을 통해 부분집합을 생성하고 있습니다. 여기서 각 함수 호출 때마다 현재 상태를 ans 리스트에 추가하고 있습니다.
부분집합 문제에 대한 핵심 이해:
- 재귀적으로 부분집합을 탐색하면서 각 재귀 호출은 curr 리스트에 현재 상태까지의 부분집합을 포함시킵니다.
- curr 상태가 정해질 때마다 이 상태를 새로운 리스트로 만들어 ans에 추가합니다.
코드 블록 안에서 addAll(dfs(nums, m, i+1, curr));으로 하면서 발생하는 에러는 dfs 함수가 void로 정의되어 있어 값을 반환하지 못하는 것 때문입니다. 대신, 주어진 코드처럼 재귀 함수 호출 자체에서 결과를 리스트에 추가하는 방식은 적절합니다.
관련 게시물 링크:
이와 비슷한 상황에서 부분집합 문제의 해답을 찾는 예제를 포함하고 있는 유사한 답변 게시물을 추천드립니다. 직접적으로 도움이 되실 수 있습니다.
완전탐색 - 구현(순열) 질문
여기서는 순열의 구현에 대해 설명하고 있습니다. 구조는 다르지만, 백트래킹의 원리를 이해하는 데 도움이 될 수 있습니다.시간복잡도 질문
백트래킹과 반복문에 대한 기초적인 이해를 제공하여 시간복잡도를 이해하는 데 도움이 됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
잠겨버린 사물함 시간초과 관련 질문입니다.
0
16
1
Climbing Stairs 문제 basecase 생각하는 방법
0
25
1
DFS/BFS
1
33
2
노션 링크 질문드립니다!
0
65
3
[문제풀이] network delay time
0
59
2
위상정렬 구현 관련
0
72
3
코딩테스트를 위한 JAVA 질문 있습니다!
0
85
1
점진적과부하 문제 - 시간 초과 오류
0
80
2
예제 2번 오류
0
77
2
part5 홍팀청팀 테스트케이스 오류
1
79
1
코테 사이트 네트워크 연결....
1
85
2
DP-다익스트라
0
72
2
코테 사이트 네트워크 연결 문제 확인 부탁드립니다.
2
87
2
코테 사이트에 접속이 안됩니다.
0
92
2
노션 링크가 어디있나요?
0
103
2
정답과 동일하게 작성 후 실행 또는 제출했음에도 시간초과
0
93
4
part6. 구름의 개수 풀이 시간초과 이유
0
79
2
DFS vs BFS 중 BFS 추천해주신 것 관련 질문
1
74
2
part5. 청팀홍팀 풀이 질문 드립니다.
0
85
3
추후 학습 계획 질문
0
80
1
자바 정렬
0
47
2
코테의 바이블(java) 와 해당 강의 차이
0
109
2
커리큘럼 관련 질문
0
72
1
queue에 값을 추가하는 메서드는 어떤 차이가 있나요?
0
81
1

