더블릿
30 계단 | 옥 상 | 제출 현황 | Ranking | FAQs | 오류보고 | QandA | 푼   후 | 자유게시판 |
 
koi 점핑 사다리 문제 풀이
삭제 | 편집 | 답글

문제의 목표는 맨 아래의 막대(0번)에서 맨 위의 막대(N – 1번)로 최대한 빨리 이동하는 것이다. 


이동은 위로만 이루어지기 때문에, 동적계획법을 이용하여 가장 아래 막대부터 처리해 나가면 답을 구할 수 있다. 


Best[i]를 0번 막대부터 i번 막대까지 도달하는데 최소의 시간이라고 하자. (정의에 의해 Best[0] = 0) 그러면 0번부터 N-1번 막대까지 돌면서 그 막대에서 다음 막대들로 최대한 빨리 점프하는 시점을 찾아 더 좋은 경우 Best 값을 갱신시켜 나가면 된다. 모든 막대가 최소 속도 1로 움직이므로 어느 막대에서 범위 내의 막대로 이동하는 것은 유한 시간 내에 가능하며 (최대 L), 따라서 언제까지나 두 막대가 만나지 않거나 할 때 등은 고려하지 않아도 된다. 


각각의 막대에 대해 총 O(K)번 처리해야하므로, 다음 막대로 가는 최소 시간을 찾는 알고리즘을 O(1)이라 하면 O(NK) 수행시간에 해결할 수 있다. 한 막대에서 그 다음 막대로 가는 최소 시간을 찾는 알고리즘은 막대의 현재 상태에 따라 조금씩 달라지는데, 두 막대가 서로 가까워지는 경우, 서로 멀어지는 경우 그리고 같은 방향으로 움직이는 경우로 나눠서 해결하면 O(1) 시간에 쉽게 찾아낼 수 있다.


 
2012-07-31 17:48 , testid
[previous]