질문드립니다.
171
작성한 질문수 36
function solution(n, k, arr, m) {
let tmp = new Array(k).fill(0);
let answer = [];
function DFS(L, s, sum) {
if (L === k && sum % m === 0) { ////////// 이렇게 작성하면
console.log(tmp);
answer.push(tmp.slice());
} else {
for (let i = s; i < n; i++) {
tmp[L] = arr[i];
DFS(L + 1, i + 1, sum + arr[i]);
}
}
}
DFS(0, 0, 0);
return answer.length;
}
let arr = [2, 4, 5, 8, 12];
console.log(solution(5, 3, arr, 6));
위 코드에서 if 부분을 제가작성한것처럼 하면 tmp를 출력했을 때 이러헥 12가 중복되서 나오게 되는데 이유를 잘 모르겠습니다. 
if ( L === k && sum % m === 0 ) 와
if( L ===k ) {
if (sum % m ===0)
{ ~~}
}
은 다른가요??
답변 1
2
안녕하세요^^
레벨의 나타내는 L값은 k보다 커지면 안됩니다. L값이 k가 됬을 때 n개중에서 k개를 뽑은 경우가 하나 완성된 것입니다. 즉 L은 k값 이하에서만 움직여야 합니다.
그런데 하나의 조합이 완성되는 조건을 if(L==k && sum%m==0)으로 하면 L==k가 되어 n개중 k개를 뽑았는데, sum%m==0을 만족하지 않아 재귀가 더 뻗어서 L이 k보다 커지게 됩니다.
아래 코드를 실행해서 확인해 보세요.
function solution(n, k, arr, m) {
let tmp = new Array(k).fill(0);
let answer = [];
function DFS(L, s, sum) {
console.log(L, s, sum, tmp);
if (L === k && sum % m === 0) { ////////// 이렇게 작성하면
console.log(tmp);
//answer.push(tmp.slice());
} else {
for (let i = s; i < n; i++) {
tmp[L] = arr[i];
DFS(L + 1, i + 1, sum + arr[i]);
}
}
}
DFS(0, 0, 0);
return answer.length;
}
let arr = [1, 2, 3, 4, 5];
console.log(solution(5, 3, arr, 12));
continue를 사용하는 이유
0
100
2
정렬 가능 여부 판단하기
0
80
2
알고리즘 학습법 관련해서 질문드립니다.
0
95
1
코드 리뷰 부탁드립니다!
0
107
1
indexOf를 사용해서 풀어보았습니다 !!
0
75
1
저는 이런식으로 구현 해보았습니다 !!
0
69
1
12,13,14 강의 소리만 나오고 검은 화면입니다
0
110
3
반복문 최소화하고 indexOf 사용해서 풀어봤습니다
0
74
1
영상 보기 전에 직접 풀어봤습니다.
0
79
1
섹션1의 17번문제 이 풀이로 풀어도 될까요?
0
141
2
정규표현식으로 처리해도 상관없나요 ?
0
127
2
3칸씩 건너뛸 수 있을 경우
0
132
2
강의에 대해 질문있습니다.
0
144
2
Object와 Set을 이용해 풀어봤습니다.
0
128
2
이렇게 해도 되나요?
0
107
2
선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.
0
149
2
이렇게 풀어도 괜찮을까요?
0
145
1
이렇게 풀어도 괜찮을까요?
0
123
1
모든 아나그램 찾기에서 시간복잡도
0
106
1
코드리뷰 부탁드립니다.
0
138
1
for loop 탈출은 return 문으로 해도 되지 않나요?
0
133
1
투포인트알고리즘으로 풀어봤습니다.
0
147
0
코드 리뷰 부탁드립니다.
0
121
1
코드 맞게 작성한 거 아닌가여??
0
149
1





