[풀이 방법]

  • 저는 문제를 풀 때, 실제로 두 좌표 간의 적분 값을 식으로 구해서 문제를 풀었습니다.
  • 다만, 문제를 다 풀고 나서 보니 두 좌표 (x1,y1) , (x2,y2) 가 있을 때, (y1+y2) / 2 한 값이 적분 값이 된다는 것을 알 수 있었습니다.(뒤늦게 깨달아버렸습니다..)

[풀이 코드]

# (앞의 좌표 + 뒤의 좌표 /2) 넓이가 나옴
def func(pos1, pos2):
    x1, y1 = pos1
    x2, y2 = pos2
    A = (y2 - y1) / (x2 - x1)

    return (A / 2 * (x2 ** 2 - x1 ** 2) + (y2 - A * x2) * (x2 - x1))


def solution(k, ranges):
    answer = []
    pos = [(0, k)]
    integral = []

    while k != 1:
        k = k // 2 if k % 2 == 0 else k * 3 + 1
        pos.append((pos[-1][0] + 1, k))

    # 한칸 구간별 적분 결과 구하기
    for idx in range(0, len(pos) - 1):
        integral.append(func(pos[idx], pos[idx + 1]))

    length = len(integral)
    for a, b in ranges:
        if -b > length - a:
            answer.append(-1)
        else:
            answer.append(sum(integral[a:length + b]))

    return answer

+ Recent posts