문제링크 : https://www.acmicpc.net/problem/16922
#include <bits/stdc++.h>
using namespace std;
int n, result;
int arr[4] = { 1, 5, 10, 50 };
bool check[1001]; //50 * 20 + 1
void func(int cnt, int index, int sum)
{
if (cnt == n)
{
if (!check[sum]) // 1 + 5 = 5 + 1이기에 조건을 검
{
check[sum] = 1; //방문처리
result++; //조건에 맞는 값 카운트 셈
}
return;
}
for (int i = index; i < 4; i++)
{
func(cnt + 1, i, sum + arr[i]); //현재 인덱스 기준으로 자기 자신 + 뒤에 값들 더해감
} //ex) i = 1 (arr[1] = 5) -> 5, 10, 50 더해감
}
int main()
{
cin >> n;
func(0, 0, 0); //초기 값은 0 0 0
cout << result;
}
인덱스 값을 조절하여 재귀방식으로 구현했다.
'백준 > 실버' 카테고리의 다른 글
[백준 1890번] 점프 (C++) (0) | 2023.02.05 |
---|---|
[백준 1051번] 숫자 정사각형 (C++) (0) | 2023.02.05 |
[백준 2841번] 외계인의 기타 연주 (C++) (0) | 2023.02.05 |
[백준 25644번] 최대 상승 (C++) (0) | 2023.02.05 |
[백준 3135번] 라디오 (C++) (0) | 2023.02.05 |