ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

Peaks coding task - Learn to Code - Codility

Divide an array into the maximum number of same-sized blocks, each of which should contain an index P such that A[P - 1] < A[P] > A[P + 1].

app.codility.com


๋ฌธ์ œ ํ’€์ด

๊ฐ ๊ตฌ๊ฐ„์„ ๋‚˜๋ˆŒ ๋•Œ, ๊ฐ ๊ตฌ๊ฐ„๋งˆ๋‹ค peek๋ฅผ ํฌํ•จํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด peek์ธ ๊ตฌ๊ฐ„์„ ์ฐพ๋Š”๋‹ค.

๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์€ ์ฃผ์–ด์ง„ A ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์˜ ์•ฝ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์•ฝ์ˆ˜์— ๋Œ€ํ•œ ๊ตฌ๊ฐ„์„ ํ™•์ธํ•˜๊ณ  peek๋ฅผ ํฌํ•จํ•˜๋Š” ์ง€ ํ™•์ธํ•œ๋‹ค.

 


์ฝ”๋“œ

def solution(A):
    peeks = []
    length = len(A)
    for i in range(1, length - 1):
        if A[i - 1] < A[i] > A[i + 1]:
            peeks.append(i)

    cnt = len(peeks)
    if not cnt:
        return 0

    for i in range(cnt, 0, -1):
        if length % i == 0:
            block_size = length // i
            check = [False] * i
            for peek in peeks:
                idx = peek // block_size
                if not check[idx]:
                    check[idx] = True

            if all(check):
                return i
    return 0
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€