백준 2331 : 반복수열

혀니앤·2021년 4월 27일
0

C++ 알고리즘

목록 보기
57/118

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함수를 돌면서 반복수열의 값을 구해준다.
반복수열을 두번 돌아야한다는 점이 비효율적인것같다.

profile
일단 시작하기

0개의 댓글