C# 우박수열 - 정적분 / 프로그래머스 [Lv.2]

출처: 프로그래머스 코딩 테스트 연습
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;
}

문제가 복잡하지만 그냥 점을 찍고 넓이를 구하는 문제.

딱히 특별한 게 없다.

 

 

댓글

Designed by JB FACTORY