Game Develop

[HackerRank] Extra Long Factorials 본문

Algorithm/HackerRank

[HackerRank] Extra Long Factorials

MaxLevel 2022. 10. 6. 19:57

https://www.hackerrank.com/challenges/extra-long-factorials/problem?isFullScreen=true 

 

Extra Long Factorials | HackerRank

Calculate a very large factorial that doesn't fit in the conventional numeric data types.

www.hackerrank.com

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
vector<int> add(vector<int> num1, vector<int> num2) // sum, addNum
{
    if (num1.size() == 1 && num1[0== 0return num2;
 
    for (int i = 0; i < num2.size(); i++// 1의 자리수부터 더하기.
    {
        int one = num1[i];
        int two = num2[i];
 
        if (one + two >= 10)
        {
            num1[i] = (one + two - 10);
            bool isPush = true;
 
            for (int j = i+1; j < num1.size(); j++)
            {
                if ((num1[j]) + 1 == 10
                {
                    num1[j] = 0;
                    isPush = true;
                }
                else
                {
                    num1[j] = (num1[j]) + 1;
                    isPush = false;
                    break;
                }
            }
 
            if (isPush)
            {
                num1.push_back(1);
            }
 
        }
        else
        {
            num1[i] = (one + two);
        }
    }
 
    return num1;
}
 
void extraLongFactorials(int n)
{
    if (n == 1)
    {
        cout << 1;
        return;
    }
 
    vector<int> sum = { 0 };
    vector<int> addNum = { 1 };
 
    for (int i = 2; i <= n; i++)
    {
        for (int j = 0; j < i; j++)
        {
            sum = add(sum, addNum);
        }
 
        addNum = sum;
        if (i == n) break;
        sum = { 0 };
    }
 
    reverse(sum.begin(), sum.end());
 
    for (int i = 0; i < sum.size(); i++)
    {
        cout << sum[i];
    }
}
cs

 

큰 수의 덧셈 혹은 곱셈을 구현해야 하는 문제다.

자바나 파이썬은 BigInteger을 지원하다보니 그냥 두세줄이면 끝나는 문제긴 한데, C++은 그렇지 않다보니 일일이 구현한다.

내 코드는 그냥.. 숫자의 덧셈을 일일이 구현한 코드다.

그냥 곱셈으로 풀었어야 했는데, 처음에 무작정 덧셈으로 풀어야겠다..라는 생각으로 이렇게 풀어버렸다.

통과되는거 보니까 큰 문제는 없는 듯 싶다. 반복문도 필요한만큼만 돌긴 하다.

 

 

 

'Algorithm > HackerRank' 카테고리의 다른 글

[HackerRank] Queen's Attack II  (0) 2022.10.07