JAVASCRIPT/코딩테스트

프로그래머스 레벨1 - 부족한 금액 계산하기(자바스크립트)

진짠 2023. 2. 11. 15:30
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/82612

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

놀이기구의 이용료가 반복해서 탈 때 마다 처음 이용료만큼 증가한다.

 

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(...)을 사용하여 배열로 바꾼다음에 푸는 방법도 있다는 것을 알았다.

 

생각보다 다양한 함수를 사용하여 문제를 푼 사람들이 많아 신기했다.

 

 

 

 

 

 

 

728x90