이 문제에서 중요한 점은
⭐ 블록에 적힌 번호가 n일때 가장 첫 블록은 n*2번째 위치에 설치하고 그 다음은 n*3, n*4에 설치한다.
⭐ 기존에 설치된 블록을 빼고 새로운 블록을 집어 넣을 수 있다
⭐ 만약 1부터 시작이라면 입출력 예시와 같이 제일 앞에 0이 있어야한다.
이때 12번 블록에 들어갈 블록을 생각해보면
12번 블록의 약수는 1,2,3,4,6,12이다 이때 최종적으로 들어가게 되는 블록은 제일 큰 약수인 6이다.
만약 6번째 블록은 12번째 블록에 설치되는 것이다.
이 약수는 제일 작은 약수에서 원래 값을 나누어주면 된다.
그리고 이 약수가 10,000,000보다 낮은 경우에만 블록으로 사용 가능하기 때문에 만약 가장 큰 약수가 이 보다 크다면 앞에서부터 숫자를 늘려가면서 원래값에 나눠주면 그보다 작은 값을 얻을 수 있다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
const int MAX_VALUE=10000000;
long long FindMaxDiv(int num)
{
long long result=1;
for(int i=2;i<=sqrt(num);i++){
if(num%i==0){
result=i;
if(num/i<=MAX_VALUE){
result=num/i;
break;
}
}
}
return result;
}
vector<int> solution(long long begin, long long end) {
vector<int> answer;
for(int i=begin;i<=end;i++){
if(i==1){
answer.push_back(0);
continue;
}
answer.push_back(FindMaxDiv(i));
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV2][C++]순위검색 (0) | 2024.07.10 |
---|---|
[프로그래머스][LV2][C++]조이스틱 (0) | 2024.07.09 |
[프로그래머스][LV2][C++]요격 시스템 (0) | 2024.07.05 |
[프로그래머스][LV2][C++]혼자서 하는 틱택토 (0) | 2024.07.04 |
[프로그래머스][LV2][C++]N-Queen (0) | 2024.07.03 |