728x90
- 문제
- 코드
function solution(a, b, n) {
var answer = 0;
while(n >= a)
{
answer += Math.floor(n/a)*b
n = Math.floor(n / a) * b + n % a;
}
return answer;
}
-해설
우선 n을 a개로 나누는 것이 목적이기 때문에 n이 a개만큼 더 못나누는 상황 즉 n >= a 일 경우가 안될 때까지 while문으로 나누게 끔 하였다.
이제 answer에는 (n / a) 한값에 * b 몇병을 추가적으로 주는지 곱해서 우선 answer에 넣어두고, n의 값은 n / a * b 에 n % a를 더해주어야한다. n % a를 하는 이유는 위의 사진을 보면 5병일 때 2로 나누면 1병은 그대로 들고있다가 나중에 더해준다. 우리는 이 작업을 미리해둬서 바로 n에 계산해주게 한다.
- Math.floor에 대해서
Math.floor를 안쓰면 n / a 를했을 때 정수형으로 나오는 것이 아닌 소수점이 붙어서 나온다. 그래서 n / a를 강제적으로 정수형으로 바꾸기 위해서 Math.floor를 썼다. 비슷한 parseInt도 방법이나 Math.floor가 속도가 더 빨라서 문제 해결할 때 좋다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS] 2016년 (0) | 2024.06.13 |
---|---|
[프로그래머스/JS] 명예의 전당(1) (0) | 2024.06.13 |
[프로그래머스/JS] 두 개 뽑아서 더하기 (0) | 2024.06.05 |
[프로그래머스/JS] 문자열 내 마음대로 정렬하기 (0) | 2024.06.03 |
[프로그래머스/JS] 시저 암호 (0) | 2024.05.30 |