Level 2. 우박수열 정적분
설명을 잘 따라가면 지문 길이에 비해 어려운 문제는 문제는 아니었다.
이 그래프는 각 구간에서는 1차 함수이므로, 정적분한 넓이가 (b - a) * (f(b) + f(a)) / 2라는 걸 알고 있다면 쉽게 풀 수 있는 문제였다.
#include <iostream>
#include <vector>
#include <set>
using namespace std;
vector<int> get_collatz(int n)
{
vector<int> v;
while (n != 1)
{
v.emplace_back(n);
if (n & 1) n += n + n + 1;
else n >>= 1;
}
v.emplace_back(1);
return v;
}
vector<double> solution(int k, vector<vector<int>> ranges)
{
vector<double> answer;
vector<int> collatz = get_collatz(k);
for (vector<int>& range : ranges)
{
int s = range[0];
int e = collatz.size() + range[1] - 1;
if (e < s)
{
answer.emplace_back(-1);
continue;
}
double integral = 0;
for (int i = s; i < e; ++i)
integral += (collatz[i] + collatz[i + 1]) * 0.5;
answer.emplace_back(integral);
}
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 0. 원소들의 곱과 합 (0) | 2023.07.10 |
---|---|
Level 2. [3차] 방금그곡 (0) | 2023.07.09 |
Level 2. 괄호 변환 (0) | 2023.07.07 |
Level 0. 배열의 원소 삭제하기 (0) | 2023.07.06 |
Level 0. 주사위 게임 2 (0) | 2023.07.05 |