문제링크 :https://www.acmicpc.net/problem/16922
문제설명
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(0, 0,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 |