IF - 중복순열 구하기

Goody·2021년 5월 13일
0

알고리즘

목록 보기
101/122

문제

1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열
하는 방법을 모두 출력합니다.


예시

InputOutput
[3,2][[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]

풀이 및 회고

  • 얼핏 보면 N중 배열로 풀 수 있을 것 같지만, DFS를 학습중이므로 DFS 로 풀어봤다.
  • DFS로 미리 만들어둔 빈 배열 temp 를 탐색한다.
  • tempdepth번째 원소에 i를 넣으면, 각 depth마다 i 부터 N까지의 수가 채워진다.
  • 이 때, i를 한번 채웠으면 바로 다시 DFS를 호출함으로써 깊이를 늘린다.
  • 깊이가 count와 같아지면, answer 배열에 temp의 복사본을 삽입한다.
  • 그렇지 않으면 temp 배열은 1부터 N 까지 커지며, count개의 원소를 갖게 된다.

코드

const solution = (N, count) => {
	let answer = [];
	let temp = new Array(count);
	temp.fill(0);

	const DFS = (depth) => {
		if (depth === count) answer.push([...temp]);
		else {
			for (let i = 1; i <= N; i++) {
				temp[depth] = i;
				DFS(depth + 1);
			}
		}
	};

	DFS(0);
	return answer;
};

0개의 댓글