문제
10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다.
풀이
function solution(m, arr){
let answer = '';
const n = arr.length;
const visited = new Array(n).fill(0);
let tmp = new Array(m).fill(0);
function DFS(L){
if(L===m){
answer+=`${tmp}\n`;
}
else{
for(let i = 0; i < n; i++){
if(visited[i]===0){
visited[i]=1;
tmp[L]=arr[i];
DFS(L+1);
visited[i]=0;
}
}
}
}
DFS(0);
return answer;
}
let arr =[3, 6, 9];
console.log(solution(2, arr));
- 순열에서는 종료조건 이전까지 for문을 돌며 방문 여부를 체크한다.
- 체크되지 않은 요소는 임시 배열에 넣고, 체크한 뒤 재귀를 호출한다.
- 종료 조건이 되면 출력하고, 재귀가 끝나면 해당 요소는 다시 방문 여부를 해제한다.
'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
[알고리즘] 연속 부분수열 2 (투포인터 알고리즘) (0) | 2022.09.09 |
---|---|
[알고리즘] 모든 아나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우) (0) | 2022.04.20 |
[알고리즘] 중복순열 구하기 (0) | 2022.03.16 |
[알고리즘] 최대점수 구하기(DFS) (0) | 2022.03.16 |
[알고리즘] 합이 같은 부분집합(DFS) (0) | 2022.03.09 |