본문 바로가기

Algorithm

C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2331번:반복수열 답

반응형

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
#include <iostream>
using namespace std;
int c[1000000];
int A, P;
int pow(int x, int P)
{
    int ans = 1;
    for (int i = 0; i < P; i++)
        ans *= x;
    return ans;
}
int next(int A, int P)//마지막 자리부터 처음 자리까지 보면서 수열을 구한다.
{
    int ans = 0;
    while (A > 0)
    {
        ans += pow(A % 10, P);
        A /= 10;
    }
    return ans;
}
int sequence(int A, int P, int ans)
{
    if (c[A] != 0)//수열이 반복된다면 그 전 숫자까지가 수열의 길이
        return c[A]-1;
    c[A] = ans;
    int next_sequence = next(A, P);
    return sequence(next_sequence, P, ans + 1);
}
int main() {
    cin >> A >> P;
    cout << sequence(A, P, 1)<<'\n';
}
cs