-
15650) N과 M (2) c++백준코딩일기 2020. 12. 10. 14:57
문제 ) www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이 )
N과 M (1) 번 문제와는 다르게 오름차순으로 결과값이 출력되면서 중복 없이 출력하는 문제다.
재귀 호출에서 현재 뽑은 원소의 이전 값들은 고려하지 않도록 for 문의 i 값을 함께 넘겨주면 된다.
코드 )
#include <iostream> using namespace std; int N, M; int arr[9]; bool visited[9]; void func(int num, int cnt) { if (cnt == M) { for (int i = 0; i < M; i++) cout << arr[i] << " "; cout << "\n"; } else { for (int i = num; i <= N; i++) { if (!visited[i]) { arr[cnt] = i; visited[i] = 1; func(i+1, cnt+1); visited[i] = 0; } } } } int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> N >> M; func(1,0); }
'백준코딩일기' 카테고리의 다른 글
15652) N과 M (4) c++ (0) 2020.12.10 15651) N과 M (3) c++ (0) 2020.12.10 15649) N과 M (1) c++ (0) 2020.12.10 11656) 접미사 배열 c++ (0) 2020.12.01 10824) 네 수 c++ (0) 2020.12.01