본문 바로가기
Programming/BOJ

[C/C++] 백준 #2331 반복수열(구현)

by 작은별하나 2023. 4. 26.
반응형

#2331 반복수열 문제는 단순하게 구현만하면 됩니다.

 

문제의 링크입니다.

https://www.acmicpc.net/problem/2331

 

2331번: 반복수열

첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.

www.acmicpc.net

이 문제에서 구현의 초점은 바로 자리수를 가져오는 것과 그것을 p제곱하는 것입니다.  A란 숫자가 있으면, p값이 바뀌지 않는다면, 모든 자릿수를 p제곱한 후의 합은 항상 같은 숫자가 됩니다.

 

 

저는 개수를 세기 위해서 배열에 count를 하게 했습니다.  배열의 최대 개수는 9의 5제곱은 59049이므로 이것을 4개 더한 236196보다 크게 잡아주면 됩니다.

 

제가 구현한 소스입니다.

//------------------------------------------------
//    baekjoon #2331
//        - by Aubrey Choi
//        - created at 2019-06-28
//------------------------------------------------
#include <stdio.h>

int next(int a, int p)
{
    int sum = 0, t, s;
    while(a)
    {
        t = a % 10;
        a /= 10;
        s = t;
        for(int i = 1; i < p; i++, s *= t);
        sum += s;
    }
    return sum;
}

int main()
{
    int a, p, count = 1;
    static int v[500000];
    scanf("%d%d", &a, &p);
    while(v[a] == 0)
    {
        v[a] = count++;
        a = next(a, p);
    }
    printf("%d\n", v[a]-1);
    return 0;
}
728x90

댓글