2024년 1월 3일 수요일

Algorithm - 우박수열 정적분

 



    콜라츠 추측으로 숫자 N을 1로 만들고 계산 과정을 그래프로 나타낸다.


나타낸 그래프의 면적을 구하는 문제이다.

각 구간의 넓이를 구해서 더하면 되는데

사다리꼴 넓이 공식을 이용하면 된다.

(윗변 + 아랫변) x 높이 / 2

높이는 어차피 1이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import matplotlib.pyplot as plt
 
 
def GetWidth(a, b):
    return (a+b)/2
 
 
def solution(k, ranges):
    sqc = []
    answer = k
    sqc.append(k)
    
    while answer!=1:
        if answer %2==0:
            answer /=2
        else :
            answer = answer*3+1
            
        sqc.append(answer)
    
    print(sqc)
 
    plt.plot(sqc)
    plt.show()
    
    answer = 0
    
    if sum(ranges)>0:
        for i in range(ranges[0], ranges[-1]): 
            answer += GetWidth(sqc[+i], sqc[+i+1])
    else:
        for i in range(0len(sqc)-1):
            answer += GetWidth(sqc[+i], sqc[+i+1])
    
    return answer
 
 
 
 
print(solution(5, [0,0]))
 
 
cs


그래프를 출력하기 위해 파이썬으로 만들었다.


n=5인 경우, 5->16->8->4->2->1

와 같은 과정으로 계산되며 전체 면적을 계산하면 33이 나온다.


결과

다른 결과




댓글 없음:

댓글 쓰기

c++ thread.h

 c++에서 쓰레드 돌릴려면 thread.h 헤더를 쓰면 되는데 이 친구는 쓰레드가 아직 실행 중인지, 아니면 강제 종료하거나 하는 함수가 없어서 조금 아쉬운 애다. std::thread 는 로컬 변수로 선언하든 new 동적 할당을 하든 start 함...