본문 바로가기

재귀 함수2

조합 - 완전 탐색 조합: 일부 원소를 선택해 부분집합을 만드는 방법 n명의 학생들이 주어졌을 때, c명의 학생을 선택해서 만들 수 있는 모든 경우의 수를 구하시오. 간단한 완전 탐색 문제이다. 몇명의 학생을 선택하는지 값이 고정되어 있다면, 선택해야 하는 숫자 개수 만큼 반복문을 순회하면 완전 탐색을 할 수 있다. 선택해야 하는 숫자 개수가 늘어나면 늘어날수록 코드를 보기 힘들기 때문에 아래는 재귀 함수형태로 구현한 코드이다. 완전 탐색 문제는 재귀 함수를 이용하면 간단하게 작성 할 수 있다. void printPicked(vector& picked) { for(auto it : picked) { cout 2019. 10. 28.
소풍 - 완전 탐색 문제 n명의 학생들이 소풍 때 두 명씩 짝을 지어 행동하게 하려고 한다. 그런데 서로 친구가 아닌 학생들끼리 짝을 지어 주면 서로 싸우거나 같이 돌아다니지 않기 때문에, 항상 서로 친구인 학생들끼리만 짝을 지어야 한다. 입력 값으로 학생의 수와 친한 친구 관계가 주어졌을 때, 학생들을 짝 지을 수 있는 방법의 수를 출력하시오. 짝 지을 수 있는 모든 방법의 수를 탐색하여 친한 친구 관계만 체크해서 해결 할 수 있다. 문제를 해결하는 포인트는 재귀적으로 두 학생을 짝 지어주는 경우의 수를 계산하는 동작 bool areFriends[10][10]; bool taken[10]; int countPairings(bool* taken, int n) { int ret = 0; int mark = -1; // 현재 .. 2019. 10. 28.