일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 15649
- C
- 14890
- 13458
- 9663
- 백준
- C++
- 테트로미노
- 15651
- 백트래킹
- 2798
- 15683
- rust설치
- 팰린드롬수
- 14888
- 13460
- 14501
- rustup
- 연산자 끼워넣기 성공
- 러스트란 #cargo
- 1259
- 15650
- 14503
- 3190
- 10872
- 14500
- 분해합
- 14891
- 15652
- 문제풀이
Archives
Easy-So-Easy
[백준] 15650번 N과 M (2) - C/C++ 본문
반응형
백준 15650 문제(Problem)
풀이(Solution)
이 문제는 15649번 N과 M (1) 문제와 매우 유사한 문제이다. 문제의 핵심 포인트는 1~N까지의 자연수를 고르는데 중복이 불가능하고, 중복 수열 또한 있어서는 안된다.
1~N까지의 자연수 선택 중복을 피하기 위해서 visited 배열을 사용하였고, 중복 수열을 피하기 위해선 func 함수에 pos 변수 인자를 받아주었다.
func 함수의 기저조건은 depth가 M일 때 즉, 조합이 M개가 선택되었을 때 arr 배열에 저장되어 있는 값들을 출력하도록 설정하였다.
또한, pos값을 받은 pos+1부터 반복문을 돌게 하여 수열의 중복을 피하도록 코드를 짜보았다.
코드(Code)
#include<iostream>
#define MAX 9;
using namespace std;
int N, M, visited[9], arr[9];
void func(int pos, int depth) {
if(depth == M) {
for(int i=0; i<M; i++)
cout << arr[i] << ' ';
cout << '\n';
return;
}
for(int i=pos+1; i<=N; i++) {
visited[i]=1;
arr[depth]=i;
func(i, depth+1);
visited[i]=0;
}
}
int main() {
cin >> N >> M;
func(0, 0);
}
반응형
'BaekJoon' 카테고리의 다른 글
[백준] 2580번 스도쿠 - C/C++ (0) | 2023.06.21 |
---|---|
[백준] 9663번 N-Queen - C/C++ (0) | 2023.06.20 |
[백준] 15652번 N과 M (4) - C/C++ (0) | 2023.06.20 |
[백준] 15651번 N과 M (3) - C/C++ (0) | 2023.06.20 |
[백준] 15649번 N과 M (1) - C/C++ (0) | 2023.06.19 |