https://www.acmicpc.net/problem/2331
★★☆☆☆
그래프와 연관된 문제인 것은 알아서 dfs로 풀까 싶었는데,
visited 배열의 메모리를 다 잡고가는것이 효율적인것인지 의문이 들었다..
그래서 vector를 만들어서 있는 값이 나오면 그 값의 인덱스를 출력하도록 했다.
이 경우, 반복수열의 크기가 커지면 반복문의 수행이 늘어나 비효율적으로 될 수 있다.
두 방식의 장단점을 고려해보아야할것같다.
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int a, p;
vector<int> visited;
void repeat(int start) {
visited.push_back(start);
//cout << start << " ";
int next = 0;
while (start > 0) {
int tem = 1;
for (int i = 0; i < p; i++) {
tem *= start % 10;
}
next += tem;
start /= 10;
}
for (int i = 0; i < visited.size(); i++) {
if (visited[i] == next) {
cout << i << "\n";
return;
}
}
repeat(next);
return;
}
int main() {
cin >> a >> p;
repeat(a);
return 0;
}
https://dbstndi6316.tistory.com/m/111
visited 배열의 값이 2보다 크면(bool 배열의 경우 true이면) return한다.
마지막에 visited함수를 돌면서 반복수열의 값을 구해준다.
반복수열을 두번 돌아야한다는 점이 비효율적인것같다.