프로그래머스 레벨1 - 부족한 금액 계산하기(자바스크립트)
https://school.programmers.co.kr/learn/courses/30/lessons/82612
문제
놀이기구의 이용료가 반복해서 탈 때 마다 처음 이용료만큼 증가한다.
price = 가격, money = 총 가진 금액, count = 놀이기구 타는 횟수라고 선언할 때 얼만큼 부족한지를 return 시키면 된다.
결국 놀이기구 총 가격 - 총 가진 금액이 되는 것이다.
총 가진 금액은 알고 있으니 결국 구해야 하는 것은 놀이기구의 가격.
횟수만큼 반복해서 놀이기구의 이용료가 증가해야 하니 결국 만만한 for문을 사용하기로 했다.
제한사항
돈이 부족하지 않으면 0을 return 해야 한다는 것 이외에는 따로 코딩에 적용하지 않았다.
답
function solution(price, money, count) {
for(let i=1;i<=count;i++) { //놀이기구를 타는 횟수만큼 반복하여
money -= price*i; //반복횟수 * 놀이기구의 처음 가격을 반복횟수만큼 차감한다.
}
return money < 0 ? Math.abs(money) : 0;
}
es6를 들어오게 되면서 var 이외에 let과 const라는 선언하여 변수를 할당할 수 있다.
간단히 설명하면 let으로 선언했을 때 var과의 차이라면 블록 레벨 스코프 내에서 사용 가능하고 호이스팅도 일어나지 않는다.
const는 선언과 초기화가 동시에 일어나서 고정된 수를 할당하는데 사용한다.
이에 대해서는 나도 따로 더 조사를 해 포스팅을 할 예정이다.
개념이 잘 잡혀있지 않다면 함수 호이스팅, 스코프, let,var,const를 꼭 학습했으면 좋겠다.
js에서 굉장히 자주 쓰고 중요한 개념이기 때문이다.(나는 프로젝트 버전 문제 때문인지 팀장님이 못쓰게 하지만.)
암튼 배워서 var대신 let을 써봤다. 물론 코딩 자체에 아무런 차이는 없다.
money에서 놀이기구 총 이용 가격을 빼주었다.
가격이 부족하면 -가 나오기 때문에 Math.abs() 를 사용하여 절대값을 구해주었다.
0보다 작은 경우 부족하지 않다는 의미이기 때문에 0을 return 시킨다.(코딩테스트를 공부하면서 삼항 연산자를 꽤 사용한다. 일일히 if문 부여하는 것보다 한줄로 깨끗하게 작성할 수 있어서?)
비교
수학과 코딩이 또 밀접한 관계가 있다는 사실을 다시금 깨달았다.
이 문제도 '가우스 공식' 을 알면 한줄로 풀 수 있었다.
(숫자 연산 관련 알고리즘은 역시 직접 짜는 것 보다 수학 전공자의 도움을 받는게 마음 편하다. 세상 혼자 사는거 아니니까...)
그리고 for문대신 three dots(...)을 사용하여 배열로 바꾼다음에 푸는 방법도 있다는 것을 알았다.
생각보다 다양한 함수를 사용하여 문제를 푼 사람들이 많아 신기했다.