더북(TheBook)

각 스팬 계산을 시작할 때 span_end는 4행처럼 FALSE가 된다. 스팬의 길이는 5~9행 사이 내부 루프에서 계산된다. 5행은 스팬이 끝나지 않는 한 시간을 거슬러 갈 것을 지시한다. 반복은 ‘i - k ≥ 0’는 조건에 따라 결정된다. 이때 i - k는 스팬이 끝났는지 확인하고자 거슬러 가는 날짜의 인덱스로, 0은 첫째 날에 해당하므로 인덱스는 0이 될 수 없다. 스팬의 끝에 대한 확인은 6행에서 한다. 스팬이 끝나지 않았으면 7행에서 k를 증가시키고, 그렇지 않으면 9행에서 스팬이 끝나고 5행으로 다시 돌아가 루프가 끝난다. 외부 루프의 마지막인 10행에서는 배열 spans의 적절한 위치에 k의 값을 저장한다. 루프를 빠져나온 뒤 11행에서 알고리즘의 결과인 배열 spans를 반환한다.

알고리즘을 시작할 때 i = 0, k = 1이므로 최초 5행이 실행되면 조건을 만족하지 않아 루프를 실행하지 못한다. 이것은 스팬이 1인 경우에 해당한다.

앞에서 펜과 종이를 언급했듯이, 알고리즘을 이해하는 올바른 방법은 수작업으로 실행해 보는 것이다. 언제든지 알고리즘이 복잡해 보이거나 완전히 이해했는지 확신할 수 없으면 몇 가지 예로 알고리즘이 수행하는 작업을 적어 본다. 구식으로 보일지 모르지만, 시간이 많이 절약될 것이다. 알고리즘 1-1에 대해 확신이 서지 않는다면 지금 직접 실행해 보고 알고리즘이 명확해지면 이 지점으로 다시 돌아오자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.