작성
·
151
1
25줄에 이해가 안 되는 게 있습니다. while(fund<target_money).fund가 target의 값을 갖는데 까지 얼마나 걸리는지 구하는 건데 왜 fund가 target보다 작을 때라고 while안에 넣나요? 그럼 정확히 fund와 target이 일치할 때의 시간을 구하는 게 아니지 않나요?
답변 1
3
while(🔥)
while문의 🔥 부분은 while문을 도는 반복 조건이 됩니다. 🔥 이 부분에 들어갈 조건식이 참이여야지만 while문을 돌게 돕니다. 이 조건식이 거짓이면 while문을 돌지 않습니다.
fund가 target_money 값을 갖는데까지 얼마나 걸리는지를 구하는 행위는 fund < target_money (while문 조건 참)인 동안에만 이루어져야 하기 때문입니다. fund >= target_money (while문 조건 거짓)가 되면 목표에 도달한 것이니 더 이상 while문을 돌지 않습니다.
seed_money >= target_money 을 만족하는 데까지 몇 년이 걸리는지 알고 싶은 것이기 때문에 seed_money 초기값을 가지고 출발한 fund가 fund >= target_money 가 될 때까지 fund < target_moeny인 상태 동안에는 계속 해서 fund에 연 이자율을 곱하여 fund 값을 증가시키고 동시에 year를 카운팅 해나가야 합니다. 우리의 목표는 fund를 target_money 에 도달시키는 것이기 때문이에요.
fund < target_money 인 상태라는 것은 아직 target_money 에 도달하지 못했다는 것임으로 fund에 연 이자율을 곱하여 fund 값을 증가시키고 동시에 year를 카운팅하는 행위를 더 해야 합니다. 즉, 아직 fund < target_money 인 상태라는 것은 while문을 더 돌려서 이 작업을 더 해줘야 한다는 의미가 됩니다.
따라서 이렇게 fund에 연이자율을 곱해서 fund 값을 증가시키고 year을 카운팅 하는 행위는 fund < target_money 조건인 동안에만 이루어져야하기 때문에 while(fund<target_money) 인 것입니다. fund >= target_money 가 되면 목표였던 fund 가 target_money 에 도달하게 된 것이므로 더 이상 while문을 돌지 않고, 즉 더 이상 연이자율 곱하는 행위를 하지 않습니다.
(+ 덧붙여서 fund == target_money 이렇게 정확히 딱 떨어지게 일치하게 되기는 힘듭니다. fund와 target_money와 연이자율은 double 실수이기 때문입니다. 소수들까지 전부 일치하게 되기는 힘들지요. 그래서 while문 반복 조건을 fund != target_money 로 하신다면 무한 루프에 빠지실 수도 있어요. 따라서 fund >= target_money 이렇게 fund가 목표 금액에 도달하거나 혹은 처음으로 넘을 때가 우리가 목표하는 순간이자 while문을 더 이상 돌지 않아야하는 때입니다.)