method(A, start)의 논리를 따라가보면,
1. d[start]에 저장된 값이 있으면 이를 반환.
2. for문을 돌리며 오늘 이후로 일을 수행할 수 있는 경우를 따져보는데, d[i]에는 i일에 일을 하는 경우 최대 금액을 저장.
3. i=start~N에 대해 d[i]의 최댓값을 반환.
이 됩니다.
그런데 2번에 따르면 d[i]에는 'i일에 일하는 경우만을 확인한 값'이 저장되고, 1번과 3번에 따르면 d[i]가 0일 경우에 한해서는 for문을 돌며 'i일 이후로 얻을 수 있는 최대 금액'을 반환하게 됩니다.
이후 같은 start 값에 대해 method(A, start)가 호출될 경우, d[i] 값을 반환하게 될 것입니다. 즉, 같은 start 값에 대해 처음과 두 번째 이후 각각 다른 반환값을 줄 수 있게 됩니다.
이에 대한 반례는
4
2 800
1 900
2 200
1 900
입니다.
(method(0)
-> i=0 -> method(2)=900 -> d[0]=800+900
-> i=1 -> method(1) -> method(2)=200 -> d[1]=900+200)
hwahn416 3년 전
너무 고통스럽습니다... 왜 틀렸는지 모르겠어요 ㅠㅠㅠ
고수님들 도와주십시오... ㅠㅠ
3일째 보고만 있네요 ㅠㅠ