기타/Codility

[Medium] FibFrog

백곰곰 2022. 6. 11. 23:07
728x90
반응형

[문제]

개구리가 피보나치 수 만큼 뛰어 강 반대편으로 넘어갈 때 최소 점프 수를 구하는 문제

(넘어가지 못한다면 -1을 반환)

 

FibFrog coding task - Learn to Code - Codility

Count the minimum number of jumps required for a frog to get to the other side of a river.

app.codility.com

 

[코드]

시간복잡도 : O(N*log(N))

피보나치수를 구한 다음 특정 나뭇잎에 도달할 수 있는지 체크하고 마지막으로 강 건너편에 도달할 수 있는지 체크

(코드가 깔끔하지 않아 개선의 여지가 있음)

def solution(A):
    # write your code in Python 3.6
    fib = [0 for i in range(100001)]
    step = [-1 for i in range(len(A))]
    fib[1] = 1
    answer = -1
    lastfib = 0
    dest = len(A)
    
    for i in range(2, 100001) :
        fib[i] = fib[i-1] + fib[i-2]
        if(fib[i] > len(A)+1) :
            lastfib = i-1
            break
    for i in range(0, len(A)) :
        if A[i] == 1 :
            for j in fib[2:lastfib+1] :
                if i-j == -1 :
                    step[i] = 1
                elif i-j >=0 and i-j < len(A) and A[i-j] == 1 and step[i-j] != -1:
                    if step[i] == -1 :
                        step[i] = step[i-j] + 1
                    else:
                        step[i] = min(step[i-j] + 1, step[i])
    for i in fib[2:lastfib+1] :
        if dest - i == -1 :
            answer = 1
            break
        elif dest-i >=0 and A[dest-i] == 1 and step[dest-i] != -1:
            if answer == -1 :
                answer = step[dest-i] + 1
            else :
                answer = min(answer, step[dest-i]+1)
            
    return answer

 

728x90

'기타 > Codility' 카테고리의 다른 글

[Medium] NumberSolitaire  (0) 2022.06.11
[Easy] MaxSliceSum  (0) 2022.06.11
[Demo] MissingInteger  (0) 2022.06.11
[Easy] Nesting  (0) 2022.06.10
[Easy] MinPerimeterRectangle  (0) 2022.06.10