문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

푸는 TIP

 

소스 코드

#include <stdio.h>
#include <malloc.h>
#pragma warning(disable : 4996) //비주얼 스튜디오 scanf 오류 해제
void reset_matrix(int *);
int main() {
int size=0, max=0, row=1; //배열의 크기 및 최댓값, 행의 개수 선언
int *matrix = NULL;
int i = 0, j = 0;
scanf("%d %d", &max, &size);
matrix = (int*)malloc(size * int); //배열의 크기 만들기

while (i = 0, j = max; i < size; i++, j--) { //배열의 행이 몇개 되는지 확인
row *= j;
}
reset_matrix(matrix);
for (i = 0; i < row; i++) { //행의 개수만큼 반복
for (j = 0; j < size; j++) { //열의 개수만큼 반복
if (j != 0 && matrix[j] == matrix[j-1])
}
}

free(matrix);
return 0;
}
void reset_matrix(int * matrix) {
for (int i = 0; i < (sizeof(matrix) / sizeof(int)); i++) {
matrix[i] = 1;
}
}

실행 결과

 

느낀 점

오랜만에 코딩을 하니 계속 하다가 막히는 부분이 있어서 힘들었다.

처음에 헛고생으로 2차원 배열로 만들어서 중복을 확인하려했는데 너무 번거로운 작업이라 수정해서 위와 같은 작업으로 진행했다.

 

문제 링크

https://www.acmicpc.net/problem/15649

+ Recent posts