문제링크 :https://www.acmicpc.net/problem/16922

 

16922번: 로마 숫자 만들기

2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다.

www.acmicpc.net

 문제설명 

 

1. 사용 할 수있는 로마숫자가의 갯수 N이 주어지고  ,N개의 로마숫자를 이용하여 만들 수 있는 서로다른 수의 갯수를      출력.

 

 알고리즘 

 

1.중복 조합을 이용하여 구하는데, 똑같은 숫자가 여러개 만들어질경우 한개로 생각하기때문에 숫자가 겹치는지 여부를    배열로 체크해주면 된다.

 

 코드 

 

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
31
32
33
34
35
36
37
38
39
#include<iostream>
 
using namespace std;
 
bool arr[10000];
int n, num[4= { 1,5,10,50 };
int result = 0;
void func(int cnt,int number,int idx) {
    
 
    //cnt=n 일때 이미 숫자를 만든적이있으면 return 
    //없으면 result++
    if (cnt == n) {
        if (arr[number])return;
        arr[number] = 1;
        result++;
        return;
    }
 
    
    for (int i = idx; i < 4; i++) {
        func(cnt + 1, number + num[i],i);
    }
 
 
}
 
int main() {
 
    cin.tie(NULL);
    ios::sync_with_stdio(0);
 
 
    cin >> n;
    func(00,0);
    cout << result;
 
}
 
cs

'c++ > 백준' 카테고리의 다른 글

백준 12886번: 돌 그룹  (0) 2020.06.12
백준 14890번: 경사로  (0) 2020.06.12
백준 16928번 : 뱀과 사다리 게임  (0) 2020.06.03
백준 14226번 : 이모 티콘  (0) 2020.06.03
백준 1713번: 후보 추천하기  (0) 2020.05.27
ariz1623