부트캠프 컨텐츠 '데일리 코딩' 중 오늘의 문제를 가져와봤다.
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
'각종 문제들' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 - 최빈값 구하기 (1) | 2023.03.30 |
---|---|
[프로그래머스] 코딩테스트 입문 - 분수의 덧셈 (0) | 2023.03.28 |
[프로그래머스] 코딩테스트 입문 (0) | 2023.03.28 |
[종합퀴즈] 객체지향 프로그래밍 심화 (1) | 2022.12.30 |
[종합퀴즈] 객체지향 프로그래밍 기초 (0) | 2022.12.28 |