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 | 31 |
Tags
- 개발자 특강
- 모던 자바스크립트 딥다이브
- 모던 자바스크립트 TIL
- 프로그래머스 데브코스 프론트엔드 TIL
- KDT 프로그래머스 데브코스 프론트엔드
- 투포인터알고리즘 js
- 머쓱이
- 프로그래머스 데브코스
- Frontend Roadmap
- 프로그래머스 데브코스 프론트엔드
- 백준 node.js
- 우테캠 회고록
- Vue3
- TypeScript 문법 소개
- react 프로젝트 리팩토링
- 백준 js
- frontend roadmap study
- useEffect return
- 리팩토링 회고
- Vue3 Router
- 모던 javascript Deep Dive
- 모던 자바스크립트 Deep Dive TIL
- 프로그래머스 K_Digital Training 프론트엔드
- react customHook 예시
- KDT 프로그래머스
- useRef 지역 변수
- 인프런 자바스크립트 알고리즘 문제풀이
- 모던 자바스크립트 Deep Dive
- 프로그래머스 K_Digital Training
- K_Digital Training
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