[C++] BOJ 16922번: 로마 숫자 만들기

ㅎㅎ·2023년 7월 7일
0

BOJ

목록 보기
22/65

BOJ 16922번: 로마 숫자 만들기

문제

로마 숫자에서는 수를 나타내기 위해서 I, V, X, L을 사용한다. 각 문자는 1, 5, 10, 50을 의미하고, 이 문제에서 다른 문자는 사용하지 않는다.

하나 또는 그 이상의 문자를 이용해서 수를 나타낼 수 있다. 문자열이 나타내는 값은, 각 문자가 의미하는 수를 모두 합한 값이다. 예를 들어, XXXV는 35, IXI는 12를 의미한다.

실제 로마 숫자에서는 문자의 순서가 중요하지만, 이 문제에서는 순서는 신경쓰지 않는다. 예를 들어, 실제 로마 숫자에서 IX는 9를 의미하지만, 이 문제에서는 11을 의미한다.

로마 숫자를 N개 사용해서 만들 수 있는 서로 다른 수의 개수를 구해보자.

입력

첫째 줄에 사용할 수 있는 문자의 개수 N (1 ≤ N ≤ 20)이 주어진다.

출력

첫째 줄에 로마 숫자 N개를 사용해서 만들 수 있는 서로 다른 수의 개수를 출력한다.


문제 풀이 - 성공

반복문을 통해 모든 경우의 수를 set 컨테이너에 넣는다.
set 컨테이너를 사용해 중복을 제거한다.

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

set<int> s; // 중복 제거를 위한 set 컨테이너 사용

int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    int n, ans, i, v, x, l;
    cin >> n;

    for (i = 0; i <= n; i++) {
        for (v = 0; v <= n - i; v++) {
            for (x = 0; x <= n - i - v; x++) { // 계산값을 넣어줌
                l = n - i - v - x;
                ans = i + v * 5 + x * 10 + l * 50;
                s.insert(ans);
            }
        }
    }

    cout << s.size();

    return 0;
}

profile
Backend

0개의 댓글