[프로그래머스 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;
}