[210406][백준/BOJ] 15654번 N과 M (5) 15655번 N과 M (6) 15656번 N과 M (7) 15657번 N과 M (8)
문제
N과 M (5)
https://www.acmicpc.net/problem/15654
N과 M (6)
https://www.acmicpc.net/problem/15655
N과 M (7)
https://www.acmicpc.net/problem/15656
N과 M (8)
https://www.acmicpc.net/problem/15657
풀이
N과 M (1)을 푼 상태에서 응용을 하면 문제를 풀 수 있다.
이전 문제들과는 다르게 수열을 만들 값들을 입력받는 문제이다. 입력받은 값은 벡터에 저장하여 문제를 해결하였다.
-
N과 M (5)번은 일단 입력받은 값을 벡터에 저장한 다음에 정렬을 한다. 그다음 반복문을 돌면서 출력을 할 배열에 i가 아닌 벡터의 값을 넣어주면 된다.
-
N과 M (6)번은 시작점을 만들어주면 된다.
-
N과 M (7)번은 vis 함수를 제거해주면 된다.
-
N과 M (8)번은 vis 함수를 제거해주고 시작점을 만들어주면 된다.
코드
N과 M (5)
#include <bits/stdc++.h>
using namespace std;
int board[10];
bool vis[10];
int n, m, num;
vector<int> V;
void func(int index)
{
if (index == m)
{
for (int i = 0; i < m; ++i)
cout << board[i] << ' ';
cout << '\n';
return;
}
for (int i = 0; i < V.size(); ++i)
{
if (!vis[i])
{
board[index] = V[i];
vis[i] = 1;
func(index + 1);
vis[i] = 0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while (n--)
{
cin >> num;
V.push_back(num);
}
sort(V.begin(), V.end());
func(0);
}
N과 M (6)
#include <bits/stdc++.h>
using namespace std;
int board[10];
bool vis[10];
int n, m, num;
vector<int> V;
void func(int index, int start)
{
if (index == m)
{
for (int i = 0; i < m; ++i)
cout << board[i] << ' ';
cout << '\n';
return;
}
for (int i = start; i < V.size(); ++i)
{
if (!vis[i])
{
board[index] = V[i];
vis[i] = 1;
func(index + 1, i);
vis[i] = 0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while (n--)
{
cin >> num;
V.push_back(num);
}
sort(V.begin(), V.end());
func(0, 0);
}
N과 M (7)
#include <bits/stdc++.h>
using namespace std;
int board[10];
int n, m, num;
vector<int> V;
void func(int index)
{
if (index == m)
{
for (int i = 0; i < m; ++i)
cout << board[i] << ' ';
cout << '\n';
return;
}
for (int i = 0; i < V.size(); ++i)
{
board[index] = V[i];
func(index + 1);
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while (n--)
{
cin >> num;
V.push_back(num);
}
sort(V.begin(), V.end());
func(0);
}
N과 M (8)
#include <bits/stdc++.h>
using namespace std;
int board[10];
int n, m, num;
vector<int> V;
void func(int index, int start)
{
if (index == m)
{
for (int i = 0; i < m; ++i)
cout << board[i] << ' ';
cout << '\n';
return;
}
for (int i = start; i < V.size(); ++i)
{
board[index] = V[i];
func(index + 1, i);
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
while (n--)
{
cin >> num;
V.push_back(num);
}
sort(V.begin(), V.end());
func(0, 0);
}
Author And Source
이 문제에 관하여([210406][백준/BOJ] 15654번 N과 M (5) 15655번 N과 M (6) 15656번 N과 M (7) 15657번 N과 M (8)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kwkim95/210406백준BOJ-15654번-N과-M-5-15655번-N과-M-6-15656번-N과-M-7-15657번-N과-M-8저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)