Link https://www.acmicpc.net/problem/16922
소스결과 1984 KB / 0 ms
출처 Baekjoon
언어 C++ 17
분류 브루트포스
설명
I V X L 4개로 구성된 로마 숫자 N개를 이용하여 서로 만들 수 있는 다른 수의 총 가지 수를 출력하는 문제.
한개의 경우에 대해서 총 4개의 가지가 존재하는 전형적인 브루트 포스 문제
앞에서 미리 탐색을 한 경우에는 경우의 수에 추가 하지 않도록 확인 하는 변수가 필요하다.
또한 가지치기를 하지 않는 다면 바로 타임아웃이 걸린다. 모든 경우의 수를 다 확인 하면서 탐색을 적게 하는 방법을 적용해야 한다.
알고리즘
1. 숫자 n을 입력 받는다 ( 최대 깊이 )
2. 0번 인덱스 부터 앞서 선택한 값 이상인 경우를 전부 탐색한다.
3. 앞선 경우의 수에서 탐색을 하지 않았다면 경우의 수에 1을 추가한다.
4. 출력
소스코드
#include <iostream>
using namespace std;
const short MAX = 50 * 20;
const short value[4] = { 1 , 5, 10, 50 };
int n;
bool check[MAX + 1];
int result;
void func(int pos, int bound, int val)
{
if (pos == n)
{
if (!check[val])
{
check[val] = true;
++result;
}
}
else
{
for (int i = bound; i < 4; i++)
{
func(pos + 1, i, val + value[i]);
}
}
}
int main()
{
cin >> n;
func(0, 0, 0);
cout << result;
return 0;
}
'Algorithm > Brute Force' 카테고리의 다른 글
Baekjoon 16675 두 개의 손 (0) | 2019.03.31 |
---|---|
Baekjoon 12100 2048 (Easy) (0) | 2019.03.08 |
BaekJoon 14501 퇴사 (0) | 2019.02.03 |
BaekJoon 2309 일곱 난쟁이 (0) | 2019.02.03 |
BaekJoon 1107 리모컨 (0) | 2019.01.15 |