SEB_FE_45(코드스테이츠)/section 2.

데일리코딩 ] 원금이 3배가 되는 시점 찾기

YTReeee 2023. 5. 18. 00:27

변수

변수는 어떤 값을 식별하기 위한 저장소에 붙인 이름이다.

 

변수의 선언, 할당, 종류, 호이스팅

//변수는 아래와 같이 선언한다.
let nickName; // 변수가 선언되었다.
console.log(nickName) // -> undefiend // 값을 할당하지 않았지만, JS에서 undefiend를 할당하여 초기화

//변수에 값을 할당하는 방법은 아래와 같다.
nickName = YongTree;
console.log(nickName) // -> YongTree // 닉네임에 용트리 값이 할당되었다.

//변수를 선언할 수 있는 키워드 let, const, var
/*
let, const는 ES6 부터 도입된 변수 선언 키워드이다.
const는 상수를 의미하며, 해당 키워드로 선언하는 경우, 원시자료형의 값을 재할당 할 수 없다(참조자료형의 값은 수정 가능).
let 키워드로 선언하는 경우는 값을 재할당할 수 있다.
두 키워드 모두 재선언은 불가능하다.
*/

/*
var키워드는 ES6 이전까지 유일한 변수선언 키워드였다.
var키워드는 재선언도 가능하고, 값의 재할당도 가능하다.
var키워드의 특징 중 재선언이 가능하다는 점은 개발 시 개발자가 의도하지 않은 에러를 발생시키는 단점이 있었다.
var키워드는 블록레벨 스코프를 지원하지 않고, 함수레벨스코프만 지원하는 단점도 있었다.
이외에도 var키워드의 단점을 보완하고자 let, const 키워드가 등장했다.
*/

/*
변수는 호이스팅이 가능하다.
호이스팅이란 자바스크립트가 코드를 한줄씩 읽기 전에 미리 선언된 변수나 함수 클래스를 평가하여,
문서 최상단에서 실행시키는 것을 의미한다.
*/

 

while 문

//while문은 반복문의 한 종류이다. 아래와 같이 사용한다.

var n = 0;
var x = 0;

while (n < 3) {
  n++;
  x += n;
}

/*

let 변수 = 값; // 변수선언

while (조건식 === true) {
	작동코드;
    변수++(또는 변수--) 증감식;
}
*/

// 조건식이 참이면 작동하며, 조건식이 거짓이라면 이하 코드는 작동되지 않고 반복을 멈춘다.

데일리 코딩 문제

function computeWhenTriple(interestRate) {
  //숫자(연이율)를 입력받는다.
  //원금이 3배 이상이 되는 시간(숫자)을 리턴한다.
  //결과를 저장할 변수를 선언한다.
  let principal = 1;
  let year = 0
  while(principal < 3){
    principal = principal + (principal * interestRate / 100) // 이자율을 별도로 변수로 선언해도 됨
    //위계산식이 작동한후 하나씩 증가시킨다.
    year++;
  }
  return year;
}

회고

function computeWhenTriple(interestRate) {
  //숫자(연이율)를 입력받는다.
  //원금이 3배 이상이 되는 시간(숫자)을 리턴한다.
  //원금(principal) 변수를 만들어서 값 1을 할당한다.
  let principal = 1;
  //원금이 3배 이상이 되는 시점의 햇수가 필요하기 때문에 year변수를 선언하고 0을 할당한다.
  let year = 0
  while(principal < 3){ 	// 원금이 3배 이하일때만 아래 코드가 작동한다.
    principal = principal + (principal * interestRate / 100)	 //[{(원금+이자)+이자}...+이자]
    //위계산식이 작동한 횟수?
    year++; 	//위코드가 작동되면 year의 값이 1증가한다.
  }
  return year;	//year를 반환한다.
}


//for문으로 바꾸면?

function computeWhenTriple(interestRate) {
  let principal = 1;
  let rate = 1 + interestRate / 100;
  let year = 0;
  
  for(let i = 0; principal < 3; i++){
    principal = principal * rate;
    year = year + i;
  }
  return year;
}

/*
이해가 잘 안됐던 부분은 조건식 부분과 year의 증가를 어떻게 시켜야 하는가였다.
조건식의 경우, 원금이 3배가 된다라는 말을 코드로 바꾸기 어려웠다.
그리고 year의 증가의 경우, 코드가 작동할 때마다 year에 1년씩 증가시켜야 하는데
이 문장을 코드로 표현하는게 어려웠다.

에러가 났던 부분은 원금에 이자를 더하는 식을 작성한 부분에서 에러가 발생하였다.
에러가 발생했을 때는
principal = principal * interestRate / 100을 입력하자 실행시간이 초과되었다는 에러가 발생하였다.
이에 principal = principal + interestRate / 100을 입력하니,
100과 200을 이자로 전달받았을 때 이외의 테스트케이스가 통과되지 않았다.

마지막으로 while문 내의 식과 같이 작성하자 정상적으로 작동하였다.
레퍼런스를 참조한 결과 rate라는 변수에 이자율 계산식을 할당하여 반복문 내에서는 원금*이자율로
표현할 수 있다는 점을 알게되었다.