1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열
하는 방법을 모두 출력합니다.
▣ 입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
▣ 출력설명
첫 번째 줄에 결과를 출력합니다. 맨 마지막 총 경우의 수를 출력합니다.
출력순서는 사전순으로 오름차순으로 출력합니다.
▣ 입력예제 1
3 2
▣ 출력예제 1
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
9
왜 이 문제에서 for 문이 아닌 재귀를 선택해야할까?
다음과 같은 코드로 로직을 짤 수도 있을 것이다.
for (let i = 1; i <= 3; i++) {
for (let j = 1; j <= 3; j++) {
console.log(i, j);
}
}
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
하지만 deps가 2가 아닌 3이 된다면 이중 for문이 아니라 3중 for문을 사용해야할 것이다. 계속 변하는 deps에 대응하기 위해서는 for문으로 접근하는 것이 아닌 dfs 를 통한 재귀로 접근을 해야했다.
배운점
1차원 배열을 선언할때 Array.from 을 사용해서 선언해보세요.
더보기
let temp = Array.from(Array(m),()=>0)
Array.from을 사용해서 2차원 배열을 선언해보세요!
더보기
let arr = Array.from(Array(n), ()=>Array(m).fill(0))
문제풀이
n = 4;
m = 3;
let temp = Array.from(Array(m), () => 0);
console.log(temp);
const dfs = (L) => {
if (L === m) {
let answer = "";
for (let i = 0; i < m; i++) {
answer += `${temp[i]} `;
}
console.log(answer);
} else {
for (let i = 1; i <= n; i++) {
temp[L] = i;
dfs(L + 1);
}
}
};
dfs(0);
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
자바스크립트의 인스턴스(Instance)란? (0) | 2022.07.08 |
---|---|
[코테강의/JS] 동전교환 (0) | 2022.07.07 |
[코테강의/JS] 최대점수 구하기 (0) | 2022.07.07 |
[코테강의/JS] 바둑이 승차 (0) | 2022.07.07 |
[백준/JS] 16719 ZOAC (0) | 2022.07.06 |