런타임이 에러로 당황했는데 알고보니 쉽게 풀 수 있었던 같습니다.
lastLen는 마지막으로 낮에 오르기 전의 도착지점입니다. 달팽이는 낮에 올랐다 밤에 내려가는 패턴이 있지만, 만약 정상에 오르는 경우 오르는 것으로 끝이지 다시 내려가는 경우가 없기때문입니다. 따라서 총 길이에서 lastLen를 뺐을 때 낮에 올라가는 길이 보다 작아질 경우 그 때까지의 도착길이에서 낮길이와 밤길이의 차를 나눠주면 됩니다.
예) 2 1 5
올랐다 내렸다하는 패턴이 있다해서 2-1을 한뒤 1씩 올라가 5일이 걸린다고 해서는 안됩니다. 마지막 길이가 3이었을때 2가 오르면 5까지 도착하므로 거기서 끝이나서 4일이 걸리는 것입니다. 따라서 총 길이 5에서 3의 간격이 낮의 길이 2보다 같거나 작을 때 반복문을 빠져나옵니다. 그리고 마지막 길이 3까지의 일수 3에다가 마지막 하루를 더하여 4일이 됩니다. 하지만 더 간단한 코드로 런타임 에러를 없앨 수 있었습니다.
더 간단히 생각하면 5일이 걸린다는 계산으로 가고, 밤의 길이를 그냥 한번 빼주는 것입니다. 계산대로라면 정상에 도착하면 미끄러지지않아 B를 한번 더 계산하는 것이기 때문에 총길이 빼기 B 에서 A와B의 범위를 나눠주고 ceil를 통해 나누는 값을 반올림 해주면 쉽습니다.!