| 1트 ~ 대충 많이 시도함
def solution(A):
    length = len(A)
    peak_array = []
    for i, _ in enumerate(A):
        if i - 1 < 0:
            continue
                 
        if i + 1 >= length:
            continue
     
        if A[i-1] < A[i] and A[i+1] < A[i]:
            peak_array.append(i)
    
    peak_length = len(peak_array)
    if peak_length == 0: return 0 
    #print(peak_array)
    for peak in peak_array:
        block_num , possible = divmod(length, peak + 1 )
        if possible != 0:
            continue
        count = 0 
        #print(block_num, possible)
        for block in range(block_num):
            if peak_length > block and block * (peak + 1) <= peak_array[block] <= block * (peak + 1) + peak:
                count += 1 
                if count == block_num:
                    #print("block num ::: " + str(block_num + 1))
                    return block_num
            else:
                break 
    return 1
- block의 크기가 무조건 peak + 1 이여야 하는 줄 알고 위와 같이 짰다

 
- 그런데 위와 같은 반례가 있어서 꼭 peak + 1은 아니여도 되는 것을 알았다 
 
- 물론 최소값은 peak + 1부터 시작해야 한다
 
결과는 여기에
| 막트
def solution(A):
    length = len(A)
    peak_array = []
    peak_true_array = [0 for _ in range(length)]
    for i, _ in enumerate(A):
        if i - 1 < 0:
            continue
                 
        if i + 1 >= length:
            continue
     
        if A[i-1] < A[i] and A[i+1] < A[i]:
            peak_array.append(i)
            peak_true_array[i] = 1
    
    peak_length = len(peak_array)
    if peak_length == 0: return 0 
    #print(peak_array)
 
    for block_size in range(peak_array[0] + 1, length + 1):
        block_num , possible = divmod(length, block_size)
        if possible != 0:
            continue
        #print(block_num, block_size)
        count = 0
        for idx in range(block_num):
            for i in range(idx * block_size, idx * block_size + block_size):
                if peak_true_array[i] == 1:
                    count += 1 
                    break 
        #print("count ::: " + str(count))
        if count == block_num:
            return block_num
- peak 값을 구한 후 peak + 1 부터 length + 1까지 block 의 크기를 지정했다 
 
- 모든 block 을 탐색해서 block에 peak를 포함하고 있으면 count +=1을 해주었다 
 
- count 가 block의 갯수와 같다면 return 해주도록 했다 
 
결과는 여기에