정화 코딩

[C++] 반복수열 (백준 2331번) 본문

PS

[C++] 반복수열 (백준 2331번)

jungh150c 2025. 4. 4. 18:55

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

 

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

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

    int a, p;
    cin >> a >> p;

    vector<int> ans;
    ans.push_back(a);

    int idx = -1;
    int cur = a;

    while (1) {
        int nxt = 0;

        while (cur > 0) {
            int rem = cur % 10;
            int tmp = 1;
            for (int i = 0; i < p; i++) tmp *= rem;
            nxt += tmp;
            cur /= 10;
        }
        
        int ansn = ans.size();
        for (int i = 0; i < ansn; i++) {
            if (ans[i] == nxt) {
                idx = i;
                break;
            }
        }

        if (idx != -1) break;

        ans.push_back(nxt);
        cur = nxt;
    }

    cout << idx << '\n';
}

단순히 수열을 계속 저장하면서 구해가면서, 이번에 새로 계산된 값이 이전에 나온 적이 있는지 선형적으로 체크하고, 만약 있다면 그 인덱스를 저장해서 출력하도록 했다. 왜냐하면 이전에 나온 적이 있다면 그 순간부터 무조건 반복되기 때문이다. (AC)

 

'PS' 카테고리의 다른 글

[C++] 건공문자열 (백준 30823번)  (0) 2025.04.06
[C++] 치킨 배달 (백준 15686번)  (0) 2025.04.04
[C++] IQ Test (백준 1111번)  (0) 2025.04.02
[C++] 1 빼기 (백준 25709번)  (0) 2025.04.02
[C++] 사전 순 최대 공통 부분 수열  (0) 2025.03.30
Comments