PS

백준 16922번 로마 숫자 만들기

남마허 2020. 2. 27. 23:28

https://www.acmicpc.net/problem/16922

 

16922번: 로마 숫자 만들기

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

www.acmicpc.net

 

 

 

 

 

<접근방법>

전형적인 백트래킹 문제입니다.

조합을 만든 후 숫자 중복 체크를 해주면 됩니다.

 

 

<느낀 점>

처음에 순열로 짜서 틀렸다..

 

 


 

 

 

<코드>

#include <iostream>
#include <algorithm>
using namespace std;

int n;
int res;
int cal[4] = {1, 5, 10, 50};
bool visit[1001];

void dfs(int dep, int start, int num) {
	if (dep == n) {
		if (!visit[num]) {
			res++;
			visit[num] = true;
		}
		return;
	}

	for (int i = start; i < 4; i++) {
		num += cal[i];
		dfs(dep + 1, i, num);
		num -= cal[i];
	}

}

int main() {
	cin >> n;

	dfs(0, 0, 0);

	cout << res << '\n';

}

 

 

 

 

 

반응형