kjsd007   4년 전

9095번 백준 질문

<혼잣 말>

1,2,3을 이용해서 합이 1부터 10인 수식을 찾는다. 각 숫자에서의 수식의 갯수를 함수에 저장한다. -여기서 이 수식의 갯수를 찾아내는 방법은? -원하는 숫자와 같은 숫자가 될 때까지 1,2,3을 더해야 한다. -하지만 2가지 수를 더하는 경우, 3가지 수를 더하는 경우, 4가지 수를 더하는 경우...등이 있다. -반복문을 이용해서는 각각의 경우 밖에 찾을 수 밖에 없다. -반복문을 추가할 수 있는가? -총 10까지의 수만 경우로 들어가기 때문에 일일히 2가지 경우로의 수 ...10가지 경우로의 수를 반복문으로 나타낼 수 있다. -이 과정을 좀 더 간단하게 만들 수 있는가? -재귀 함수? 재귀함수로 나타낸다면 기본 형 for(int i=1;i<4;i++) if(goal==i) count++; 추가는 반복문의 갯수와 goal이 갖는 변수의 갯수 그리고 반환해야하는 것은 count값 반복문을 추가하는 과정은 할 수 있다고 치자 근데 goal에 변수를 추가하는건? 모르겠다...힝

<질문>

9095번 문제를 풀면서 단순 반복을 통해서 정답을 구했습니다.

(쓸대없는말) 추후에 검색을 통해서 f(n) = f(n-1)+f(n-2)+f(n-3)이라는 수식을 통해서 간단하게 해결한다는 것을 봤습고 이 수식이 수학적으로 문제가 없다는 것은 압니다..만은 이 문제를 보고 (파칭~!) 이건 순열과 조합 문제로군! 이 경우에는 (파칭~!2) 수학적 증명을 생각해봤을 때 이 수식을 사용하면 간단하겠어!라고 생각할 수 없는 저는 단순 반복을 선택했습니다...(쓸대없는 말 끝) 

그래서 제가 푼 방식은 숫자가 4 이상일 경우 반드시 2가지 이상의 숫자를 더해야만 조합될 수 있고

n의 수는 최대  n개의 숫자를 사용하니 (1+1+1+1+1...)

그 모든 n개의 숫자를 사용하는 경우를 전부 적용했습니다.

<그래서 질문은 ★> 제가 사용한 방법을 재귀함수나 다른 방법을 사용해서 좀 더 간략하게 표현할 수 있을까요?

제 코드처럼 반복반복반복하는건 힘드니까. ( 솔직히 11이하의 숫자여서 이렇게 했지... 아니였으면...)

궁금합니다! 다른 표현이 있을까요? 더 간단한!

dyk777   4년 전

다음과 같이 생각하면 재귀적인 구조로 쉽게 바꾸실 수 있을 겁니다.

예를 들어, 7 = 1 + 6 = 2 + 5 = 3 + 4

즉 7은 ((6을 구성하는 방법의 수 + 1) + (5를 구성하는 방법의 수 + 1) + (4를 구성하는 방법의 수 + 1))가지의 방법으로 만들 수 있겠네요.

kjsd007   4년 전

그 방법을 구하는 방법이 확 이해가 않됩니다.

7이라는 숫자가 1+6,2+5,3+4 라는건 이해가 되지만

1+6,2+5,3+4가 ->  ((6을 구성하는 방법의 수 + 1) + (5를 구성하는 방법의 수 + 1) + (4를 구성하는 방법의 수 + 1))

로 변하는 과정이 잘 이해가 안되네요... 혹시 좀 더 자세한 설명을 부탁드려도 될까요?

dyk777   4년 전

앗... 괄호 밖에 *1을 친다는게 괄호 안에 +1로 넣어버렸네요.

원래 이해하신 대롭니다.

((6 방법의 수) + (5 방법의 수) + (4 방법의 수))

로 받아들이시면 되겠습니다.

댓글을 작성하려면 로그인해야 합니다.