study
우박수열 정적분[프로그래머스]
Date: 2026-05-29 07:14
Update: 2026-05-29 07:16
우박수열 정적분[프로그래머스]
접근법:
- 콜라츠 수열을 계산한다
- 범위 내의 정적분을 계산한다.
- 콜라츠 수열 사이의 넓이 = (y1 + y2) * 1 / 2
- 범위내에서 반복한다.
- 합계를 구해 정답에 채워넣는다
#include <string>
#include <vector>
using namespace std;
vector<int> calculateCollatz(int n)
{
vector<int> result;
result.push_back(n);
while(n > 1)
{
if(n & 1) n = n * 3 + 1;
else n /= 2;
result.push_back(n);
}
return result;
}
vector<double> solution(int k, vector<vector<int>> ranges) {
vector<double> answer;
vector<int> collatz = calculateCollatz(k);
int n = ranges.size();
for(int i = 0; i < n; ++i)
{
int start = ranges[i][0];
int end = collatz.size() - 1 + ranges[i][1];
if(start > end)
{
answer.push_back(-1.0);
continue;
} else if(start == end)
{
answer.push_back(0);
continue;
}
double sum = 0;
for(int j = start; j < end; ++j)
{
double area = (collatz[j] + collatz[j + 1]) / 2.f;
sum += area;
}
answer.push_back(sum);
}
return answer;
}
.gif)