https://www.acmicpc.net/problem/2331
2331번: 반복수열
첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.
www.acmicpc.net
![](https://blog.kakaocdn.net/dn/HbD9N/btrUSuFJMWW/qYk5LmCwZkckZ8kntWpkTk/img.png)
1. 우선 수를 한자리씩 분리한다
참고 : https://develop-me-z.tistory.com/103
[C++] 숫자 한자리씩 분리하기
숫자 쪼개기 10으로 나누면서 10으로 나눈 나머지를 분리해주면 된다 while(a!=0){ int rest = a%10; a /= 10; }
develop-me-z.tistory.com
2. 각 자리를 거듭제곱하면서 더해준다
참고 : https://develop-me-z.tistory.com/104
[C++] 수 거듭 제곱하기 (POW 함수)
헤더파일 사용방법 pow (double base, double n) : base 의 n제곱을 구한다 pow (float base, float n) pow (long double base, long double n) 예시 pow(10, 2) = 100 pow(10, 3) = 1000
develop-me-z.tistory.com
3. 벡터에 구한 수가 들어있는지 확인하고 없으면 벡터에 넣고 있으면 인덱스를 반환한다
참고 : https://develop-me-z.tistory.com/105
[C++] vector - find 함수 (값의 존재 유무 확인 & 위치 구하기)
헤더파일 #include 사용방법 vector v; int num; // 찾을 수 if(find(v.begin(), v.end(), num) == v.end()){ // 벡터 안에 없는 경우 } else { // 벡터안에 값이 있는 경우 cout
develop-me-z.tistory.com
#include <bits/stdc++.h>
using namespace std;
int a, p;
vector<int> v;
bool tmp;
int main(void) {
cin >> a >> p;
v.push_back(a);
int sum;
int result = 0;
while(tmp != true){
sum = 0;
while(a!=0){
int rest = a%10;
sum += pow(rest, p);
a /= 10;
}
if(find(v.begin(), v.end(), sum)==v.end()){ // v에 없으면
v.push_back(sum);
}else{
tmp = true;
result = find(v.begin(), v.end(), sum) - v.begin(); // 인덱스 출력
}
a = sum;
}
cout << result << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준/BFS/C++] 2178번 미로 탐색 (0) | 2022.12.30 |
---|---|
[백준/DFS/C++] 4963번 섬의 개수 (0) | 2022.12.30 |
[백준/DP/C++] 11055번 가장 큰 증가 부분 수열 (0) | 2022.12.29 |
[백준/ DFS&BFS/ C++] 10451번 순열 사이클 (0) | 2022.12.29 |
[백준/ DFS&BFS/ C++] 11724번 연결 요소의 개수 (0) | 2022.12.29 |