문제 푼 날짜 : 2021-09-30
문제 링크 : https://www.acmicpc.net/problem/2331
아래의 생각대로 코드를 구현하였다.
- 주어진 조건에 맞게 수열에 들어갈 값들을 만들어주면서 vector에 넣어준다.
- 이 때, vector에 이미 등장한 적이 있는 숫자라면
2-1. 그 숫자가 등장한 위치부터 뒤에 나오는 모든 숫자들은 반복된다는 의미이므로 더이상 진행하지 않는다.
2-2. 처음부터 그 위치까지 몇 개의 숫자가 등장했는지 세어주고 그 값을 return해준다.
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int convert(int num, int p) {
int ret = 0;
while (num) {
int tmp = num % 10;
ret += pow(tmp, p);
num /= 10;
}
return ret;
}
int main() {
int A, P, ret = 0;
vector<int> v;
cin >> A >> P;
v.push_back(A);
while (true) {
int num = convert(v.back(), P);
auto it = find(v.begin(), v.end(), num);
if (it != v.end()) {
ret = it - v.begin();
break;
} else {
v.push_back(num);
}
}
cout << ret;
return 0;
}
너무 문제를 어렵게 생각하지말되, 주어진 조건을 확실히 체크하여 구현하도록 하자.