본문 바로가기

알고리즘

[백준 4848] 집합 숫자 표기법

www.acmicpc.net/problem/4848

 

4848번: 집합 숫자 표기법

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있고, 집합 숫자 표기법으로 나타낸 수가 주어진다. 두 수의 합은 항상 15보다 작거나 같다.

www.acmicpc.net

 

이문제는 숫자가 15까지 밖에 없어서 

모든 수의 집합에 관련된 문자열을 string 배열에 담은뒤 

문자열과 매치 되는 수를 구하고 그 수의 합을 다시 string으로 반환해서 얻어내는 과정으로 했다.

 

코드는 다음과 같다.

 

//집합 숫자 표기법
#include <iostream>

using namespace std;
 
int main(void)
{
    int T = 0;
    string DP[16];
    string str1;
    string str2;

    cin >> T;
    
    DP[0] = "{}";
    DP[1] = "{{}}";
    DP[2] = "{{},{{}}}";

    
    for(int i = 3; i < 16; i++)
    {
        DP[i] = '{';

        for(int j = 0; j < i; j++)
        {
            DP[i] += DP[j] + ",";
        }

        DP[i].at(DP[i].size()-1) = '}'; 
    }

    for(int t = 0; t < T; t++)
    {
        cin >> str1 >> str2;
        int num1 = 0, num2 = 0;

        for(int i = 0; i < 16; i++)
        {
            if(str1 == DP[i])
                num1 = i;
            if(str2 == DP[i])
                num2 = i;
        }  

        cout << DP[num1+num2] << endl;
    }

    return 0;
}

 

'알고리즘' 카테고리의 다른 글

[백준 2231] 분해합  (0) 2020.11.01
[백준 19598] 최소 회의실 개수  (1) 2020.11.01
[백준 16953] A > B  (2) 2020.10.16
[백준 11729] 하노이 탑 이동 순서  (0) 2020.10.15
[백준 2979] 트럭 주차  (0) 2020.10.14