문제조건에서 블록은 1부터 10,000,000까지의 숫자가 적혀있다고 되어있는데 이부분을 놓쳐서 애를 좀먹은 문제이다. 블록의 범위가 begin, end 범위와 동일한 줄알았다.
풀이의 핵심은 해당 수를 나눌수있는 수들 중 10,000,000 보다작고 가장 큰수를 골라주면 된다.
#include <string>
#include <vector>
using namespace std;
long long findTile(long long& num) {
if (num == 1) return 0;
long long i = 2, res = 1;
while (i * i <= num) {// 시간초과를 방지하기위해 제곱근까지만
if (num % i == 0) {// 나누어진다면
res = i;// 정답 갱신
if (num / i <= 10000000) return (num / i);// 예시로 num = 26, i = 2일때이면 바로 13을 리턴해준다.
}
i++;
}
return res;
}
vector<int> solution(long long begin, long long end) {
vector<int> answer;
for (; begin <= end; begin++) {
answer.push_back(findTile(begin));
}
return answer;
}