[프로그래머스 C++] 숫자 블록

 

https://school.programmers.co.kr/learn/courses/30/lessons/12923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

 

해결전략

 

구현

 


 

처음 시도한 코드

 

#include <vector>
using namespace std;

long long Cal(long long k)
{
	for(int i = 2; i * i < k; i++)
	{
		if(k % i == 0){
            return k / i;
		}
	}

    return 1;
}

vector<int> solution(long long begin, long long end) {

    vector<int> answer(end+1, 0);

    for(long long i = begin; i <= end; i++){
        answer[i] = Cal(i);
    }

    return answer;
}

 

vector<int> answer( end + 1, 0 );

  • 위와 같이 vector<int> answer 배열을 만들고 대입하는 방식을 사용하면 연산을 2번 해야 한다.
  • 그래서 미리 만들고 대입하는 방식이 아닌 push_back이나 emplace_back으로 계산된 값을 바로 넣어주어 생성하는게 시간을 줄이는 방법이다.

 

정답 코드

 

#include <vector>
using namespace std;


long long Cal(long long k)
{
    long long result = 1;

	for(long long i = 2; i * i <= k; i++)
	{
		if(k % i == 0){
            result = i;
            if (k / i <= 10000000)
            {
                result =  k / i;
                break;
            }
		}
	}

    return result;
}

vector<int> solution(long long begin, long long end) {

    vector<int> answer;

    for(long long i = begin; i <= end; i++)
    {
        if (i == 1) answer.emplace_back(0);
        else answer.emplace_back(Cal(i));
    }

    return answer;
}