백트래킹, 브루트포스 알고리즘, 조합론, 구현, 수학
로마 숫자에서는 수를 나타내기 위해서 I, V, X, L을 사용한다. 각 문자는 1, 5, 10, 50을 의미하고, 이 문제에서 다른 문자는 사용하지 않는다.
하나 또는 그 이상의 문자를 이용해서 수를 나타낼 수 있다. 문자열이 나타내는 값은, 각 문자가 의미하는 수를 모두 합한 값이다. 예를 들어, XXXV는 35, IXI는 12를 의미한다.
실제 로마 숫자에서는 문자의 순서가 중요하지만, 이 문제에서는 순서는 신경쓰지 않는다. 예를 들어, 실제 로마 숫자에서 IX는 9를 의미하지만, 이 문제에서는 11을 의미한다.
로마 숫자를 N개 사용해서 만들 수 있는 서로 다른 수의 개수를 구해보자.
첫째 줄에 사용할 수 있는 문자의 개수 N (1 ≤ N ≤ 20)이 주어진다.
첫째 줄에 로마 숫자 N개를 사용해서 만들 수 있는 서로 다른 수의 개수를 출력한다.
코드
def make(c, s):
global num
if c == n:
arr[num] = 1
return
for i in range(s, 4):
num += Rome_num[i]
make(c+1, i)
num -= Rome_num[i]
n = int(input())
Rome_num = [1, 5, 10, 50]
arr = [0]*1001
num = 0
make(0, 0)
print(sum(arr))
'알고리즘 > 백준' 카테고리의 다른 글
[Silver I] 나무 탈출 - 15900 (python) (0) | 2024.07.02 |
---|---|
[Silver III] 근손실 - 18429 (python) (0) | 2024.07.02 |
[Silver III] 모든 순열 - 10974 (python) (0) | 2024.07.01 |
[Silver III] 한국이 그리울 땐 서버에 접속하지 - 9996 (python) (0) | 2024.07.01 |
[Silver III] 괄호 끼워넣기 - 11899 (python) (0) | 2024.07.01 |