🛡️ 코딩테스트/🛡️ 코테 : 프로그래머스
C# 우박수열 - 정적분 / 프로그래머스 [Lv.2]
맨텀
2023. 4. 9. 18:42
출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/134239
나의 풀이
public double[] solution(int k, int[,] ranges)
{
var dots = new List<(int x, int y)>();
dots.Add((0, k));
int i = 1;
while(k > 1)
{
if(k % 2 == 0)
k = k / 2;
else
k = k * 3 + 1;
dots.Add((i, k));
++i;
}
var answer = new double[ranges.GetLength(0)];
for(int j = 0; j < ranges.GetLength(0); ++j)
{
int left = ranges[j, 0];
int right = dots.Count + ranges[j, 1] - 1;
if(left > right)
{
answer[j] = -1;
continue;
}
double sum = 0d;
for(int x = left; x < right; ++x)
{
sum += Math.Min(dots[x].Item2, dots[x + 1].Item2); // 사각형
sum += Math.Abs(dots[x].Item2 - dots[x + 1].Item2) * 0.5d; // 삼각형
}
answer[j] = sum;
}
return answer;
}
문제가 복잡하지만 그냥 점을 찍고 넓이를 구하는 문제.
딱히 특별한 게 없다.