Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 양과 늑대
- derivedstateof
- BottomSheet
- ModalBottomSheet
- State
- compose
- 2022 kakao blind
- producestate
- 선언형ui
- mutablestate
- genarics
- 뷰바인딩
- 안드로이드
- mutableStateOf
- bottomscaffold
- apollo3
- 명령형ui
- 선언형 ui
- snapshotflow
- 2022 KAKAO BLIND RECRUITMENT
- 2989번
- 명령형 ui
- Java
- 클린아키텍처
- 자바
- remembercoroutinescope
- viewbinding
- rememberupdatedstate
- JCF
- clean coder
Archives
- Today
- Total
버미
백준 15652번 - N과 M(4) (C++) 본문
문제
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 M개를 고른 수열
- 같은 수를 여러 번 골라도 된다.
- 고른 수열은 비내림차순이어야 한다.
- 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
입력
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)
출력
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
예제 입력 1 복사
3 1
예제 출력 1 복사
1
2
3
예제 입력 2 복사
4 2
예제 출력 2 복사
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4
예제 입력 3 복사
3 3
예제 출력 3 복사
1 1 1
1 1 2
1 1 3
1 2 2
1 2 3
1 3 3
2 2 2
2 2 3
2 3 3
3 3 3
문제 풀이
#include <iostream>
using namespace std;
#define MAX 9
int n, m;
int arr[MAX] = { 0, };
void dfs(int num, int k)
{
if (k == m)
{
for (int i = 0; i < m; i++)
cout << arr[i] << " ";
cout << "\n";
return;
}
for (int i = num; i <= n; i++)
{
arr[k] = i;
dfs(i, k + 1);
}
}
int main()
{
cin >> n >> m;
dfs(1, 0);
return 0;
}
아이디어
백준 문제 분류에 백 트래킹(1)이라고 분류가 되있는 문제여서 DFS로 접근하여 풀었다.
1부터 n개의 숫자 중 m개를 뽑아 비내림차순으로 나열하는 경우의 수를 모두 출력하면 된다.
1부터 n까지 for문을 돌며 m번 재귀함수를 호출하는 것으로 구현했다.
'코딩 트레이닝' 카테고리의 다른 글
백준 14889번 - 스타트와 링크(C++) (0) | 2023.08.01 |
---|---|
백준 9663번 - N-Queen(C++) (0) | 2023.07.29 |
프로그래머스 - 정수를 나선형으로 배치하기(C++) (0) | 2023.07.27 |
백준 1918번 - 후휘 표기식 (0) | 2023.07.26 |
백준 1699번 - 제곱수의 합(C++) (0) | 2023.07.25 |