코딩테스트

[JS] 연습문제 > 콜라 문제

차차한 2024. 9. 6. 14:56

 

function solution(a, b, n) { //a병을 주면 b병만큼 받음. 나는 현재n병이 있음
    var answer = 0;
    var plus = 0;

    while(n >= a){
        plus = Math.trunc(n / a) * b;
        n = n - (a * Math.trunc(n / a)) + plus;
        answer += plus;
    }
    return answer;
}

이번 문제는 약간 암기식으로 풀려고 하니까 헷갈려서 생각보다 시간을 오래 잡아먹었다.

 

내가 20개의 병을 가지고 있고 그 수(n)가 마트에 주어야 하는 병의 개수(a)보다 적으면 더이상 교환을 할 수 없으니까 while 반복으로 n >= a 조건을 걸어 반복을 한다.

 

plus라는 변수는 마트에서 주고 받는 병의 개수.

마트에서 2병(a) 당 1개(b)의 병을 교환해주니까 Math.trunc(20(n) / 2(a)) * 1(b)를 해서 

처음에 20병을 주면 10병을 받을 수 있다.

 

내가 기존에 가지고 있는 병에서 교환에 사용했던 병(20병)을 빼고 새로 받은 병(plus, 10병)을 하면 

처음 교환 후 내가 가지고 있는 병은 10병(n)이 된다.

 

이번 문제는 내가 추가로 얻을 수 있는 병의 개수만 리턴하면 되니까 answer 변수에 plus 변수값을 더해준다.

 

문제를 풀다보니 테스트케이스는 통과가 됐는데 실제 문제풀이를 하면 2개 빼고 계속 실패가 떠서 

테스트 케이스를 추가로 넣고 테스트를 다시 했다.

위의 두 개의 테스트케이스를 모두 통과하고 문제풀이를 하니 성공~!