트랙
/
C++
C++
/
연습 문제
/
이자가 흥미로워요
이자가 흥미로워요

이자가 흥미로워요

학습 연습 문제

소개

루프

루프는 어떤 로직을 반복해서 실행할 때 사용해요. 가장 흔한 두 가지는 while loop(반복 횟수가 정해지지 않은 반복)와 for loop(정해진 횟수만큼 하는, 즉 계수 반복)예요. 나중에 다른 개념에서 다룰 for each 루프도 있어요.

일반적인 문법

for loop는 헤더와, 루프의 본문을 중괄호로 감싼 코드 블록으로 이루어져 있어요. 헤더는 세미콜론 ;으로 구분되는 세 가지 요소, 즉 초기문, 조건, 그리고 또 다른 표현식으로 이루어져 있어요. 이 요소들은 각각 비워 둘 수도 있어요.

for (init_statement; condition; expression) {
  some_statement;
}
  • 초기문 요소는 루프가 시작되기 전에 딱 한 번만 실행되는 코드예요.
  • 조건 요소는 boolean으로 평가되는 표현식이어야 하고, 루프를 언제 멈출지 결정해요. 이 조건이 true로 평가되는 동안에는 루프 안의 코드가 실행돼요. 이 표현식이 false로 평가되는 순간, 루프는 더 이상 반복되지 않아요.
  • 표현식 요소는 각 반복이 끝날 때마다 실행되는 코드예요.

while loop는 조건 검사가 true인 동안 본문을 실행해요. 아래 코드는 for를 while loop로 바꾸는 방법을 보여줘요.

init_statement;
while(condition) {
    some_statement;
    expression;
}

잠시 쉬어가기: 증가와 감소

루프를 다루다 보면 반복 횟수를 세는 카운터 변수에 1을 더하거나 1을 빼야 할 때가 많아요. 너무 흔한 일이라 증가와 감소에는 전용 연산자 ++와 --가 있어요.

이 연산자에는 전위형과 후위형이 있어요. 전위형은 문에서 사용되기 전에 변수를 바꾸고, 후위형은 사용된 뒤에 바꿔요. 대부분은 전위형을 쓰게 될 거예요.

int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3

for문 예제

_초기문_은 보통 카운터 변수를 준비하고, _조건_은 루프를 계속할지 멈출지 판단하며, _증감문_은 보통 매 반복이 끝날 때 카운터를 증가시켜요.

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

이 루프는 1부터 9까지(9 포함)의 수를 모두 더해요.

break와 continue

루프 본문 안에서 break 키워드를 사용하면 루프 실행을 완전히 멈출 수 있어요.

int sum{2};
while(true) {
    sum *= 2;
    if (sum > 1000)
        break;
}
// sum is now 1024

반면에 continue 키워드는 현재 반복의 실행만 멈추고 다음 반복을 이어가요.

int equal_sum{0};
for (int i{1}; i < 7; ++i) {
  if  (i%2 == 1) {
    continue;
  }
  equal_sum += i;
}
// equal_sum is now 12
Note

break와 continue를 최소한으로 쓰거나 아예 쓰지 않으면 루프의 논리를 이해하기가 보통 더 쉬워요. 두 키워드 모두 코드의 특정 부분을 건너뛰기 때문에, 흐름을 따라가기가 더 어려워지곤 해요.

지침

이 연습 문제에서는 저축 계좌를 다뤄요. 매년 저축 계좌의 잔액은 이자율에 따라 갱신돼요. 은행이 적용하는 이자율은 계좌에 있는 금액(잔액)에 따라 달라져요:

  • 잔액이 0달러보다 작으면 3.213%예요(잔액이 더 음수가 돼요).
  • 잔액이 0달러 이상 1000달러 미만이면 0.5%예요.
  • 잔액이 1000달러 이상 5000달러 미만이면 1.621%예요.
  • 잔액이 5000달러 이상이면 2.475%예요.

네 가지 과제가 있고, 각 과제에서는 잔액과 이자율을 다뤄요.

1. 이자율 계산하기

주어진 잔액을 기준으로 이자율을 계산하는 interest_rate 함수를 구현해요:

interest_rate(200.75);
// => 0.5

2. 이자 계산하기

주어진 잔액을 기준으로 이자를 계산하는 yearly_interest 함수를 구현해요:

yearly_interest(200.75):
// => 1.003750

3. 연간 잔액 갱신값 계산하기

이자율을 고려해 연간 잔액 갱신값을 계산하는 annual_balance_update 함수를 구현해요:

annual_balance_update(200.75);
// => 201.75375

4. 목표 잔액에 도달하기까지 걸리는 연수 계산하기

매년 잔액에 이자가 더해진다는 점을 고려해, 목표 잔액에 도달하는 데 필요한 최소 연수를 계산하는 years_until_desired_balance 함수를 구현해요. 즉, 1년 후 잔액은 시작 잔액 + 시작 잔액에 대한 이자예요. 2년 후 잔액은 1년 후 잔액 + 1년 후 잔액에 대한 이자예요. 이런 식으로, 해당 연도의 잔액이 목표 잔액 이상이 될 때까지 반복해요.

double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14

반환되는 값은 int라는 점에 유의해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C++ Exercism

이자가 흥미로워요 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C++ 트랙을 개념 19개연습 문제 100개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.