15652 : N과 M (4)

네르기·2021년 8월 27일
0

알고리즘

목록 보기
32/76

어떤 문제인가?

15650번 문제의 변형. 백트래킹 문제.

내 풀이

#include <stdio.h>

int N,M,P[9]={0};

void d(int s) {
    int i=1;
    if(s==M+1) {
        for(;i<=M;i++) printf("%d ",P[i]);
        printf("\n");
        return;
    }
    for(i=1;i<=N;i++) {
        if(P[s-1]<=i) {
            P[s]=i;
            d(s+1);
        }
    }
}

int main() {
    scanf("%d%d",&N,&M);
    d(1);
}

다른 사람들의 풀이

15650번 문제에서도 동일하게, 매개변수만 하나 더 추가하면 코드 양을 줄일 수 있다.

#include<stdio.h>

int n, m;
int a[9];

void go(int now, int cnt)
{
	if (cnt > m)
	{
		for (int i = 1; i <= m; i++)
		{
			printf("%d ", a[i]);
		}
		puts("");
		return;
	}

	for (int i = now; i <= n; i++)
	{
		a[cnt] = i;
		go(i, cnt + 1);
	}
}

int main(){
	scanf("%d %d", &n, &m);
	go(1,1);
}

hyoseung6030님의 소스
-> https://www.acmicpc.net/source/9549741

profile
프로그래머와 애니메이터가 되고파

0개의 댓글

관련 채용 정보