[프로그래머스/파이썬] 우박수열 정적분 / 구간 슬라이싱

김진만·2022년 11월 29일
0

코딩테스트

목록 보기
7/10

문제 가독성 매우 ~!~!~ 떨어지니 울렁 주의

1. 콜라츠 추측 (짝수,홀수 판단)

2. 구간 정적분


5를 초항으로 했을때 ,5*3+1 , 8 , 4 , 2 , 1
항은 6개, 사이의 길이가 1일때 x는 0~5 까지 . 즉 count = 5 ,(length로 표현해도 될듯)
0~1 , 1~2 ,,, n-1~n 했을 때 각각의 넓이 integ 배열에 append 해줌
넓이 구하는 공식은 x1의 y좌표랑 x2의 y좌표 더한다음 1곱하고 2로 나누면 되겠죠?! 삼각형 두개이니!
그리고 주어진 구간마다 정적분.
길이가 5인 그림인데, [1,-2] 구간이 1<=x<=3 이래서 헷갈렸다
코드로 표현하면 start <= x <= end+length 이다
length=5, start = 1 , end = -2 !!
그래서 구간이 1~3이 되고 예외라고한다면
구간의 길이가 0일때, length와 같을 때 , length 보다 길 때가 있겠다
각각 0 , sum(integ) , -1 로 표현해주면 되겠습니다

def solution(k,ranges):
    #콜라츠 추측
    answer=[k] //처음좌표 초기화해주고
    k1=k  // k값 계속쓰려고 k1에 넣어놓고 k는 아래에서 버려집니다 ㅠㅠ
    cnt=0  // length 되겠습니다.
    while True:  //콜라츠 추측 하라는대로 하겠습니다.
        if k%2==0:
            k=k//2
            cnt+=1
            answer.append(k)
        elif k==1:
            break
        else:
            k=k*3+1
            cnt+=1
            answer.append(k)
    print(answer)  //잘나왔나 확인한번씩해주고
    print(cnt) //길이도 마찬가지
    m=[] //여기다 마무리 적분값 append 해줄것이고
    integ=[] //넓이 겋을거에요
    for i in range(cnt):  //사다리꼴 구하는공식
        integ.append((answer[i]+answer[i+1])/2)
    print(integ)
    #정적분
    for i in range(len(ranges)): 
        if ranges[i][0]-ranges[i][1]>cnt: //구간이 오버됐을때
            m.append(-1.0) //float인거 조심
        elif ranges[i][0]-ranges[i][1]==cnt: //구간길이 length랑 같아서 적분값 0일때
            m.append(0.0) //마찬가지 float
        else:
            m.append(sum(integ[ranges[i][0]:cnt+ranges[i] [1]]))     //start , length+end
    return m
 

저의 코드입니다.

profile
충분한 전기와 컴퓨터 한 대와 내 이 몸만 남아 있다면 지구를 재건할 수 있습니다.

0개의 댓글