C++:: 프로그래머스 < 숫자 블록 >

jahlee·2023년 8월 7일
0

프로그래머스_Lv.2

목록 보기
95/106
post-thumbnail

문제조건에서 블록은 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;
}

0개의 댓글