각종 문제들

코드 복습 - 이자율 구하기

hunm719 2023. 1. 13. 22:29

부트캠프 컨텐츠 '데일리 코딩' 중 오늘의 문제를 가져와봤다.

 

1.문제 : 연이율을 입력받아 원금이 2배 이상이 될 때까지 걸리는 시간(년)을 리턴

2.입력 : 인자 1(interestRate) -> double 타입의 연이율 (%)

3.출력 : int 타입을 리턴

4.입출력 예시

int output = computeWhenDouble(7);
System.out.println(output); // --> 11

output = computeWhenDouble(10);
System.out.println(output); // --> 8

 

5.코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Solution { 
    public int computeWhenDouble(double interestRate) {
    // TODO:
        //7%가 11년에    10%가 8년? 복리네
        //10%로 계산해보자 100원에 연이율 10%면                    원금이 n이라면                                               %로하니까 너무 복잡해 곱하기로 바꿔보자
        //1년 100+10 = 110원                                      n+(n / interestRate) = yearafter1                           n * (1+(interestRate % 100))
        //2년 110+11 = 121원                                      yearafter1+(yearafter1 / interestRate) = yearafter2
        //3년 121+12.1 = 133.1원                                              .
        //4년 133.1+13.31 = 146.41원                                          .
        //5년 161.051                                                         .
        //6년 177.1561
        //7년 194.87171                                                                                  = yearafter7
        //8년 2배넘김                                             여기서 탈출시켜야함(yearafter8 > 2n)
 
        double newRate = 1 + (interestRate / 100);
        double sum = 1;
    int year = 0;
        while (sum < 2){
      sum = sum * newRate;
      year++;
    } return year;
  }
}
cs

주석 부분을 해설하자면 입출력 예시의 2번째 경우(interestRate가 10)에 원금을 100으로 가정하여 8이 리턴되는지를 먼저 계산해봤다. 이후, 원금을 n으로 가정하고, %라 가시성이 좋지 않았던 interestRate를 다른 수와 계산하기 쉽도록 곱하기로 바꿔보니 n * (1+(interestRate / 100))을 구할 수 있었고, 여기서 이자율인 '1 + intersetRate / 100'을 정의할 수 있었다.

 

이후 while문을 통해 원금에 이자율을 곱한 값을 반복하여 그 값이 2를 넘을 경우 반복 횟수를 리턴하게 만들었다.

 

처음에는 반복문 부분을 for문으로 풀려고 하다가 계속 막혔는데 이번 기회에 while문 사용법을 제대로 배우게 되었다.

 

다시 한 번 for문 while문 거기에 enhanced for문 까지 복습해본 아주 좋은 문제였다.

 

 

 

 

문제 출처 - code states