Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- TypeScript 문법 소개
- 리팩토링 회고
- Vue3
- 머쓱이
- Frontend Roadmap
- useRef 지역 변수
- react customHook 예시
- useEffect return
- 프로그래머스 데브코스
- 프로그래머스 데브코스 프론트엔드
- 모던 javascript Deep Dive
- 모던 자바스크립트 Deep Dive TIL
- KDT 프로그래머스 데브코스 프론트엔드
- 프로그래머스 K_Digital Training
- 프로그래머스 K_Digital Training 프론트엔드
- 백준 js
- K_Digital Training
- 백준 node.js
- KDT 프로그래머스
- 투포인터알고리즘 js
- Vue3 Router
- 모던 자바스크립트 Deep Dive
- 프로그래머스 데브코스 프론트엔드 TIL
- 우테캠 회고록
- 개발자 특강
- react 프로젝트 리팩토링
- 인프런 자바스크립트 알고리즘 문제풀이
- 모던 자바스크립트 TIL
- frontend roadmap study
- 모던 자바스크립트 딥다이브
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[재귀함수, 완전탐색] 순열 구하기 본문
🚩 순열 구하기
📖 문제 설명 : N 개의 자연수 중 M 개를 뽑는 경우의 수 출력
중복은 제외되므로 한 번 뽑은 수는 뽑을 수 없다. 1,2 수 중 2개를 뽑을 때,
[1,2], [2,1]의 경우만 가능하다.
💡 같은 수는 중복해서 뽑으면 안되므로 해당 수에 대한 사용 표시를 체크하는 배열을 사용한다.
// 순열 구하기 (DFS)
const permutation = []
function DFS(n, m, i, visited, arr) {
if (arr.length >= m) {
console.log(...arr)
permutation.push(arr)
return
}
for (let j = 0; j < n.length; j++) {
if (visited[j] === 0) {
visited[j] = 1
DFS(n, m, i + 1, visited, [...arr, n[j]])
visited[j] = 0
}
}
}
function solution(n, m) {
let answer = 0
// 중복 제거를 위해 방문 체크
let visited = Array.from({ length: n.length }, () => 0)
DFS(n, m, 0, visited, [])
answer = permutation.length
return answer
}
let n = [3, 6, 9]
console.log(solution(n, 2))
👨💻 코드 설명
1. 한 번 뽑은 카드는 두 번째에 뽑을 수 없기 때문에 뽑은 여부를 기록하는 배열을 사용한다. (visited)
2. 재귀 함수인에서 주어진 카드의 수만큼 반복하면서 카드를 순차적으로 뽑는다. (DFS 호출을 한다는 의미)
여기서 뽑기 전에 해당 카드가 이전에 뽑았는지를 파악하고 뽑지 않았을 경우만 뽑는다.
뽑기가 끝난 후, 뽑았다는 표시를 초기화해준다. (3에 대해 [3,6], [3,9]를 뽑았지만, [6,3], [6,9]도 뽑아야 하기 때문에)
3. baseCase에서 M 만큼 일 때 조합을 출력해 준다.
잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.
728x90
'알고리즘_JS > 인프런 JS알고리즘' 카테고리의 다른 글
[DFS] 경로 탐색 (0) | 2022.04.04 |
---|---|
[재귀함수, 완전탐색] 조합 구하기 (0) | 2022.04.03 |
[재귀함수, 완전탐색] 중복순열 구하기 (0) | 2022.04.02 |
[재귀함수, 완전탐색] 합이 같은 부분집합 (0) | 2022.04.02 |
[이분 탐색] 마구간 정하기 (0) | 2022.04.02 |
Comments