JellyApple 2024. 12. 6. 00:11

1. 문제 링크 : https://www.acmicpc.net/problem/15652

2. 문제 티어 : 실버3

3. 문제 유형 : 백트래킹

4. 문제 풀이

1) 내림차순을 유지해야 하기 때문에 start 지점을 찾아서 인덱스를 유지 시켜줘야 한다.

2) 그 외는 N과 M(3)과 비슷하다.

3) 중복 조합을 찾아서 넣어주는 문제다.

 

5. 문제 코드

let result = []; // 결과를 저장할 배열

function recursive(current, start, n, m) {
    if (current.length === m) {
        result.push(current.join(" ")); // 길이가 M인 수열을 결과에 추가
        return;
    }
    for (let i = start; i <= n; i++) {
        current.push(i); // 숫자 추가
        recursive(current, i, n, m); // 현재 숫자 i를 포함한 상태로 재귀 호출
        current.pop(); // 숫자 제거 (백트래킹)
    }
}

recursive([], 1, N, M); // 빈 배열로 시작
console.log(result.join("\n")); // 결과 출력