#BOJ 15664 N과 M(10)
N과 N(10)
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 512 MB 6838 5495 4513 81.125%
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 512 MB 6838 5495 4513 81.125%
문제
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
N개의 자연수 중에서 M개를 고른 수열
고른 수열은 비내림차순이어야 한다.
길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
입력
첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
예제 입력 1
3 1
4 4 2
예제 출력 1
2
4
예제 입력 2
4 2
9 7 9 1
예제 출력 2
1 7
1 9
7 9
9 9
예제 입력 3
4 4
1 1 2 2
예제 출력 3
1 1 2 2
구현
/*
BOJ : https://www.acmicpc.net/problem/15663
backtracking N과 M(9)
Versatile0010
*/
#include <bits/stdc++.h>
using namespace std;
int n, m;
int arr[10];
int input_arr[10];
bool isused[10];
void solve(int k, int start)
{
if (k == m)
{
for (int i = 0; i < m; i++)
cout << arr[i] << ' ';
cout << '\n';
return;
}
else
{
int temp = 0;
for (int i = start; i < n; i++)
{
if (temp != input_arr[i])
{
arr[k] = input_arr[i];
temp = arr[k];
solve(k + 1, i+1);
}
}
}
}
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> input_arr[i];
sort(input_arr, input_arr + n);
solve(0,0);
return 0;
}
GIT: https://github.com/versatile0010/PS/blob/main/Backtracking/BOJ%2015664%20N%EA%B3%BC%20M(10).cpp
Author And Source
이 문제에 관하여(#BOJ 15664 N과 M(10)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@versatile0010/BOJ-15664-N과-M10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)