코딩성장스토리

백준 2331번:반복수열 본문

백준 코딩

백준 2331번:반복수열

까르르꿍꿍 2021. 10. 4. 16:22

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

 

2331번: 반복수열

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

www.acmicpc.net

이 문제는 check배열에 값이 나왔으면 true로 저장한다음 똑같은 값이 나오면 종료하는 프로그램을 만들었다.

그리고 종료된다음 그 값까지의 개수를 구한다음 답을 구했다.

#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
bool check1[1000000] = { 0 };
int cycle(int a,int p) {       //각자리의 수 p의 제곱만큼 더한 값 함수
	int sum = 0;
	while (a) {
		int n = a % 10;
		a = a / 10;
		sum += pow(n,p);
	}
	return sum;
}
int main()
{
	int n, p;
	vector<int> a;
	cin >> n >> p;
	while (check1[n] !=true) {  //이미 들렀던 수면 탈출
		check1[n] = true;        //n의 값 방문했으므로 true
		a.push_back(n);
		n = cycle(n,p);
	}
	int cnt = 0;
	int len = a.size();
	for (int i = 0; i < len; i++) {
		if (a[i] == n)                  //반복된 수가 나오면 탈출
			break;
		cnt++;
	}
	cout << cnt;


	return 0;
}

'백준 코딩' 카테고리의 다른 글

백준 2667번:단자번호붙이기  (0) 2021.10.07
백준:9466번 팀 프로젝트  (0) 2021.10.06
백준:10451번 순열사이클  (0) 2021.10.04
백준 11724번:연결 요소의 개수  (0) 2021.10.01
백준 1260번:DFS와 BFS  (0) 2021.10.01